Fórum sql para saldo! debito x credito #257067

03/11/2004

0

Pessoal,

alguem saberia me informar como faço uma consulta me retornando junto com os dados o saldo?

tenho uma tabela de contas, com os campos de referencia, credito e debito...
gostaria q na consulta aparecesse
referencia...credito...debito...saldo
referencia...credito...debito...saldo
referencia...credito...debito...saldo

ex.:
na tabela
referencia...credito...debito
compraX...................10
compraY....................5
vendaXX.......50
compraW...................1
devo ter na consulta
referencia credito debito saldo
compraX..................10......-10
compraY...................5.......-15
vendaXX......50...................35
compraW..................1........34

de acordo com o numero de dados encontrado ele faria o saldo...

alguem pode me dar um forcinha ai????

valeu!


Mrcdlf

Mrcdlf

Responder

Posts

03/11/2004

Mrcdlf

só uma coisinha q esqueci de falar

eu não posso criar um campo saldo pq pode variar de acordo com o tipo de consulta


Responder

Gostei + 0

03/11/2004

Paulo_amorim

Olá

Pra vc trazer o saldo na consulta, vc precisa criar um campo saldo que te retorne isso!
Por que você não pode criar um campo saldo? O quê exatamente muda de acordo com a pesquisa?

SELECT referencia, credito, debito, (credito - debito) saldo FROM tabela


Até+


Responder

Gostei + 0

03/11/2004

Mrcdlf

Olá Pra vc trazer o saldo na consulta, vc precisa criar um campo saldo que te retorne isso! Por que você não pode criar um campo saldo? O quê exatamente muda de acordo com a pesquisa?
SELECT referencia, credito, debito, (credito - debito) saldo FROM tabela
Até+


bem mudaria praticamente tudo... pois o saldo é gerado de acordo com os créditos e os débitos... posso num certo momento acrescentar ou retirar ou mudar a forma de apresentação dos dados e se o saldo for um campo com valor fixo este terá q ser alterado! é possivel de fazer mais vejo muitas desvantagens...

já o exemplo que me deu, não funcionará pois fará o o saldo apenas da conta atual apresentada... preciso do saldo de cada conta seguindo uma apos outra até o saldo final... entendeu?
o saldo na verdade seria (salto anterior + (credito-debito))
na verdade podemos levar em consideração que não haverá um debito e um credito simultaneamente então seria (saldo anterior + credito se não for nulo - debito se não for nulo), de qualquer forma podemos dependendo da solução abstrair isso...

por favor me ajudem ai!


Responder

Gostei + 0

04/11/2004

Luizneto

No Oracle existe uma clausula OVER BY PARTITION que permite fazer exatamente isto, permite fazer um SUM acumulativo baseado em uma expressao, mais ou menos assim.
DATA VALOR SALDO
01/07/04 10,00 10,00
03/07/04 5,00 15,00
03/07/04 -3,00 12,00
04/07/04 7,00 19,00

Será que não existe um comando no Firebird equivalente, ou será que não possível se obter este saldo com uma VIEW ou SP ?


Responder

Gostei + 0

04/11/2004

Mrcdlf

Será que não existe um comando no Firebird equivalente, ou será que não possível se obter este saldo com uma VIEW ou SP ?




pois é, eu realmente não...

se alguem puder me dar um forçinha


Responder

Gostei + 0

04/11/2004

Luizneto

Um outro usuário deu a sugestão de criar um campo calculado manualmente no objeto TQuery, ainda não testei, tenho duvidas se eu estiver em um Grid e precisar mudar a data de uma lancamento para uma data anterior, teria que refazer a Query ?


Responder

Gostei + 0

04/11/2004

Mrcdlf

galerinha o q consegui fazer foi isso aki:

select C.valor_credito, C.Valor_debito,
((select sum(cr.valor_credito) from contas cr where (cr.DT_VENCIMENTO<=C.DT_VENCIMENTO AND cr.controle<=C.controle))
- (select sum(de.valor_debito) from contas de where (de.DT_VENCIMENTO<=C.DT_VENCIMENTO AND de.controle<=C.controle))) as SALDO
from contas C
ORDER BY C.DT_VENCIMENTO, C.controle asc

funciono mais como nem tudo é perfeito...
to com o problema se o valor so SUM for nulo ele não da resultado nenhum até que encontre um valor não nulo para poder fazer a diferença... deu pra entender?

agora como resolvo isso para não precisar ficar colocando zero onde não tem nada!?
tem como eu estar a seleção do SUM se retorno um valor e caso não tenha retornado atribuir um????????


Responder

Gostei + 0

04/11/2004

Mrcdlf

Um outro usuário deu a sugestão de criar um campo calculado manualmente no objeto TQuery, ainda não testei, tenho duvidas se eu estiver em um Grid e precisar mudar a data de uma lancamento para uma data anterior, teria que refazer a Query ?



pois é esse seria meu problema tb...
vc teria q refazer todos os saldos... ou seja não é uma solução viavel nesse caso!

esta ultima que consegui ficou boa só tem q melhorar aquele problema que comentei...

espero que alguem me de essa forcinha ai


Responder

Gostei + 0

04/11/2004

Gameiro

No firebird 1.5 tem a função coalesce, que faz isso que vc precisa

ex.:

(select coalesce (sum(valor),0) from CREDITOS)-
(select coalesce (sum(valor),0) from DEBITOS);

este exemplo está na revista clube delphi 54.

se o valor for nulo ele considera como zero,
espero que te ajude.

ate mais.


Responder

Gostei + 0

04/11/2004

Mrcdlf

No firebird 1.5 tem a função coalesce, que faz isso que vc precisa ex.: (select coalesce (sum(valor),0) from CREDITOS)- (select coalesce (sum(valor),0) from DEBITOS); este exemplo está na revista clube delphi 54. se o valor for nulo ele considera como zero, espero que te ajude. ate mais.



ajudou e muito...
agora sim a solução ficou legal!

valeu!

segue abaixo a solução:

select C.valor_credito, C.Valor_debito,
((select coalesce(sum(cr.valor_credito),0) from contas cr where (cr.DT_VENCIMENTO<=C.DT_VENCIMENTO AND cr.controle<=c.controle))
- (select coalesce(sum(de.valor_DEBITO),0) from contas de where (de.DT_VENCIMENTO<=C.DT_VENCIMENTO AND de.controle<=c.controle))) as SALDO
from contas C
ORDER BY c.DT_VENCIMENTO, C.controle asc


Responder

Gostei + 0

05/11/2004

Luizneto

Que tipo de informacao voce guarda em CONTROLE ? é um contador ? e se o usuario alterar DTVENCIMENTO para outra data anterior esta SQL continua apresentado o saldo certo ? aqui comigo uso campo ID no lugar de CONTROLE e apresenta erros no saldo apos uma alteracao deste tipo.


Responder

Gostei + 0

05/11/2004

Mrcdlf

Que tipo de informacao voce guarda em CONTROLE ? é um contador ? e se o usuario alterar DTVENCIMENTO para outra data anterior esta SQL continua apresentado o saldo certo ? aqui comigo uso campo ID no lugar de CONTROLE e apresenta erros no saldo apos uma alteracao deste tipo.


sim o controle é um campo tipo um contador sendo unico...

aqui funcionou corretamente, gostaria de saber melhor o que houve ai...

para funcionar direito as tabelas que são iguais tem q estar com os alias corretos e não esqueça de ordernar por data de vencimento primeiro e em seguinda por controle no seu caso id

é muito importante essa ordenação pois ele só pegara fará o sum até a data de vencimento sendo que somente até aquele controle, os que viram em seguinda não poderá entrar... por esse motivo aproveitei o controle para a ordenação...
senão fizer isso o sum pega a soma de todos q possui a mesma data de vencimento!!!! ou seja, se vc tiver duas ou mais datas de vencimento iguais o saldo seria gerado errado, com o total da data!...

verifique ai...

e me fale depois...


Responder

Gostei + 0

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

Aceitar