size=14pt[/size]
Bom Pessoal decidi colocar algo interessante para quem precisar…
Basicamente e um extrato Bancário, etc. direto em SQL sem usar aplicação alguma…
Criamos uma Tabela para o Exemplo
create TABLE demo_extracto
(id int(11) PRIMARY key AUTO_INCREMENT,
obs varchar(30),
entra decimal(18,2) not null default 0,
sai decimal(18,2) not null default 0,
debito_credito TINYINT not null default 0 COMMENT '1 para debito(Sai) 0 para credito(Entra)');
Adicionamos alguns dados para testar
INSERT INTO `demo_extracto` (`obs`, `entra`, `debito_credito`) VALUES ('Entro Dinheiro', '1200', '0');
INSERT INTO `demo_extracto` (`obs`, `entra`, `debito_credito`) VALUES ('Entro mais Dinheiro', '4500', '0');
INSERT INTO `demo_extracto` (`obs`, `entra`, `sai`, `debito_credito`) VALUES ('Sai Dinheiro', '0', '2800', '1');
INSERT INTO `demo_extracto` (`obs`, `entra`, `debito_credito`) VALUES ('Entro mais', '1230', '0');
INSERT INTO `demo_extracto` (`obs`, `entra`, `sai`, `debito_credito`) VALUES ('Saiu', '0', '150', '1');
INSERT INTO `demo_extracto` (`obs`, `entra`, `sai`, `debito_credito`) VALUES ('Saiu mais', '0', '1235', '1');
Criamos uma Função para auxiliar na visualização do formato numérico dentro do SQL b[/b]
DELIMITER $$
DROP FUNCTION IF EXISTS f_numero_format$$
/*A função recebe 2 parâmetros o Valor a ser convertido y a quantidade de casas decimais*/
CREATE FUNCTION `f_numero_format`(numero decimal(18,2), decimals int(1)) RETURNS varchar(20) CHARSET utf8
NO SQL
BEGIN
declare vs_retorno varchar(20);
set vs_retorno = REPLACE( REPLACE (REPLACE (FORMAT (numero, decimals), ".", "@"), ",", "."), "@", ",");
return vs_retorno;
END$$
DELIMITER ;
Y por Ultimo o SQL que faz a magica
[code]SELECT id, obs, f_numero_format(entra,2) as credito, f_numero_format(sai,2) as debito, f_numero_format(saldo, 2) as saldo
FROM (
SELECT
id,
obs,
entra,
sai,
@debito_credito := debito_credito AS tipo,
@saldo := IF(@debito_credito = 0, @saldo + entra, @saldo - sai) AS saldo
FROM demo_extracto, (SELECT @debito_credito := 0, @saldo := 0) as vars
ORDER BY id
) AS extrato
union all
SELECT 0, ‘Saldo Final’, 0, 0, f_numero_format(@saldo, 2);[/code]
Espero que seja de ajuda para alguém