GARANTIR DESCONTO

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
Jose Ramos

Jose Ramos

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar