Boa Tarde, hoje decidi colocar algo interessante para quem precisar..
Basicamente e um extracto Bancário, direito em SQL sem usar aplicação alguma, dessa forma para muito que pensam trabalhar com banco de dado MySQL fica fácil, um extracto igual ao do mestre Avelino Sampaio.
Criamos uma Tabela para o Exemplo
Adicionamos alguns dados para testar.
Criamos uma Função para auxiliar na visualização do formato numérico dentro do SQL (Opcional)
Por Ultimo o SQL que faz a magica
Fazendo um filtro entre datas usando essa consulta SQL..
Bom brevemente vou dar continuidade ao tópico e explicar como por a funcionar no Ms Access usando o Stored Procedure do Mysql.
Basicamente e um extracto Bancário, direito em SQL sem usar aplicação alguma, dessa forma para muito que pensam trabalhar com banco de dado MySQL fica fácil, um extracto igual ao do mestre Avelino Sampaio.
Criamos uma Tabela para o Exemplo
- Código:
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.
- Código:
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 (Opcional)
- Código:
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 ;
Por Ultimo o SQL que faz a magica
- Código:
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);
Fazendo um filtro entre datas usando essa consulta SQL..
- Código:
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
WHERE colunaData BETWEEN '01-01-2016' and '31-01-2016' /*Obviamente neste exemplo não tenho data, basta adicionar a coluna e testar*/
ORDER BY id
) AS extrato
union all
SELECT 0, 'Saldo Final', 0, 0, f_numero_format(@saldo, 2);
Bom brevemente vou dar continuidade ao tópico e explicar como por a funcionar no Ms Access usando o Stored Procedure do Mysql.