Fórum Controle Saldo tabela firebird 2.5 por codigo e por intervalo de datas. #546885
25/02/2016
0
Boa tarde a todos tenho uma tabela Firebird com os campos;
codigo
codaluno,
nomaluno,
datalanc,
codprod,
Historico,
entrada,
saida,
codsocio,
nome
Preciso criar em tempo de execução uma coluna saldo onde irá mostrar o saldo do periodo por datalanc e pelo codsocio
Código Datalanc Historico codsocio Nome Entrada saida Saldo
1 01/06/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 350,00
2 01/06/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 500,00
3 01/06/2016 AULAS 2 JOSE EUGENIO RAMOS 1.750,00 2.250,00
4 25/01/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 2.600,00
5 25/01/2016 AULAS 2 JOSE EUGENIO RAMOS 525,00 3.125,00
6 02/01/2016 AULAS 2 JOSE EUGENIO RAMOS 350,00 3.475,00
7 02/02/2016 VALE 1 GABRIEL ANSELMO RAMOS 200,00 3.275,00
8 02/02/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 3.425,00
9 02/03/2015 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 3.575,00
10 02/01/2016 VALE 1 GABRIEL ANSELMO RAMOS 120,00 3.455,00
Esta é a tabela geral tem um SQL que me retorna correto, mas quando quero separar por datalanc e codsocio é que dá erro, os valores não saem de acordo
Teria que dar assim;
Código Datalanc Historico codsocio Nome Entrada saida Saldo
9 02/03/2015 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 150,00
10 02/01/2016 VALE 1 GABRIEL ANSELMO RAMOS 120,00 30,00
4 25/01/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 380,00
7 02/02/2016 VALE 1 GABRIEL ANSELMO RAMOS 200,00 180,00
8 02/02/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 330,00
1 01/06/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 680,00
2 01/06/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 830,00
Só que só sai com os valores abaixo;
Código Datalanc Historico codsocio Nome Entrada saida Saldo
9 02/03/2015 CURSO GABRIEL ANSELMO RAMOS 150,00 950,00
1 01/06/2016 AULAS GABRIEL ANSELMO RAMOS 350,00 350,00
2 01/06/2016 CURSO GABRIEL ANSELMO RAMOS 150,00 500,00
4 25/01/2016 AULAS GABRIEL ANSELMO RAMOS 350,00 850,00
10 02/01/2016 VALE GABRIEL ANSELMO RAMOS 120,00 830,00
8 02/02/2016 CURSO GABRIEL ANSELMO RAMOS 150,00 800,00
7 02/02/2016 VALE GABRIEL ANSELMO RAMOS 200,00 650,00
A rotina que estou usando é a seguinte;
DMtabela.qrgeral1.close;
DMtabela.qrgeral1.sql.clear;
DMtabela.qrgeral1.sql.add('select c.codigo,c.codaluno,c.nomaluno,c.datalanc,c.codprod,c.Historico,c.entrada,c.saida,c.codsocio,c.nome,');
DMtabela.qrgeral1.sql.add('(select sum(coalesce(s.entrada,0) - coalesce(s.saida,0)) from AECAIXA2 as s');
DMtabela.qrgeral1.sql.add('where (c.datalanc between :inicio and :final) and (s.codigo <= c.codigo) and (s.codsocio = :aesocio)) as saldo');
DMtabela.qrgeral1.sql.add('from AECAIXA2 as c');
DMtabela.qrgeral1.sql.add('where (c.datalanc between :inicio and :final) and (c.codsocio = :aesocio)');
DMtabela.qrgeral1.parambyname('inicio').asdate := strtodate(MaskEdit1.text);
DMtabela.qrgeral1.parambyname('final').asdate := strtodate(MaskEdit2.text);
DMtabela.qrgeral1.parambyname('aesocio').asinteger := strtoint(lbcodigo.Caption);
DMtabela.qrgeral1.sql.add('order by c.datalanc');
DMtabela.qrgeral1.open;
DMtabela.qrgeral1.first;
O que posso estar fazendo de errado?
sds
Eugenio
codigo
codaluno,
nomaluno,
datalanc,
codprod,
Historico,
entrada,
saida,
codsocio,
nome
Preciso criar em tempo de execução uma coluna saldo onde irá mostrar o saldo do periodo por datalanc e pelo codsocio
Código Datalanc Historico codsocio Nome Entrada saida Saldo
1 01/06/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 350,00
2 01/06/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 500,00
3 01/06/2016 AULAS 2 JOSE EUGENIO RAMOS 1.750,00 2.250,00
4 25/01/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 2.600,00
5 25/01/2016 AULAS 2 JOSE EUGENIO RAMOS 525,00 3.125,00
6 02/01/2016 AULAS 2 JOSE EUGENIO RAMOS 350,00 3.475,00
7 02/02/2016 VALE 1 GABRIEL ANSELMO RAMOS 200,00 3.275,00
8 02/02/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 3.425,00
9 02/03/2015 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 3.575,00
10 02/01/2016 VALE 1 GABRIEL ANSELMO RAMOS 120,00 3.455,00
Esta é a tabela geral tem um SQL que me retorna correto, mas quando quero separar por datalanc e codsocio é que dá erro, os valores não saem de acordo
Teria que dar assim;
Código Datalanc Historico codsocio Nome Entrada saida Saldo
9 02/03/2015 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 150,00
10 02/01/2016 VALE 1 GABRIEL ANSELMO RAMOS 120,00 30,00
4 25/01/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 380,00
7 02/02/2016 VALE 1 GABRIEL ANSELMO RAMOS 200,00 180,00
8 02/02/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 330,00
1 01/06/2016 AULAS 1 GABRIEL ANSELMO RAMOS 350,00 680,00
2 01/06/2016 CURSO 1 GABRIEL ANSELMO RAMOS 150,00 830,00
Só que só sai com os valores abaixo;
Código Datalanc Historico codsocio Nome Entrada saida Saldo
9 02/03/2015 CURSO GABRIEL ANSELMO RAMOS 150,00 950,00
1 01/06/2016 AULAS GABRIEL ANSELMO RAMOS 350,00 350,00
2 01/06/2016 CURSO GABRIEL ANSELMO RAMOS 150,00 500,00
4 25/01/2016 AULAS GABRIEL ANSELMO RAMOS 350,00 850,00
10 02/01/2016 VALE GABRIEL ANSELMO RAMOS 120,00 830,00
8 02/02/2016 CURSO GABRIEL ANSELMO RAMOS 150,00 800,00
7 02/02/2016 VALE GABRIEL ANSELMO RAMOS 200,00 650,00
A rotina que estou usando é a seguinte;
DMtabela.qrgeral1.close;
DMtabela.qrgeral1.sql.clear;
DMtabela.qrgeral1.sql.add('select c.codigo,c.codaluno,c.nomaluno,c.datalanc,c.codprod,c.Historico,c.entrada,c.saida,c.codsocio,c.nome,');
DMtabela.qrgeral1.sql.add('(select sum(coalesce(s.entrada,0) - coalesce(s.saida,0)) from AECAIXA2 as s');
DMtabela.qrgeral1.sql.add('where (c.datalanc between :inicio and :final) and (s.codigo <= c.codigo) and (s.codsocio = :aesocio)) as saldo');
DMtabela.qrgeral1.sql.add('from AECAIXA2 as c');
DMtabela.qrgeral1.sql.add('where (c.datalanc between :inicio and :final) and (c.codsocio = :aesocio)');
DMtabela.qrgeral1.parambyname('inicio').asdate := strtodate(MaskEdit1.text);
DMtabela.qrgeral1.parambyname('final').asdate := strtodate(MaskEdit2.text);
DMtabela.qrgeral1.parambyname('aesocio').asinteger := strtoint(lbcodigo.Caption);
DMtabela.qrgeral1.sql.add('order by c.datalanc');
DMtabela.qrgeral1.open;
DMtabela.qrgeral1.first;
O que posso estar fazendo de errado?
sds
Eugenio
Jose Ramos
Curtir tópico
+ 0
Responder
Posts
02/03/2016
Emerson Nascimento
Não sei se resolveu, mas tente algo assim:
select
c.codigo, c.codaluno, c.nomaluno, c.datalanc, c.codprod, c.Historico,
c.entrada, c.saida, c.codsocio, c.nome,
(select sum(coalesce(s.entrada,0) - coalesce(s.saida,0))
from AECAIXA2 as s
where (s.datalanc between :inicio and c.datalanc)
and (s.codigo <= c.codigo)
and (s.codsocio = c.codsocio)) as saldo
from AECAIXA2 as c
where (c.datalanc between :inicio and :final) and (c.codsocio = :aesocio)
order by c.datalanc, c.codigo
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)