Fórum sql para saldo! debito x credito #257067
03/11/2004
0
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
Curtir tópico
+ 0Posts
03/11/2004
Mrcdlf
eu não posso criar um campo saldo pq pode variar de acordo com o tipo de consulta
Gostei + 0
03/11/2004
Paulo_amorim
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é+
Gostei + 0
03/11/2004
Mrcdlf
SELECT referencia, credito, debito, (credito - debito) saldo FROM tabela
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!
Gostei + 0
04/11/2004
Luizneto
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 ?
Gostei + 0
04/11/2004
Mrcdlf
pois é, eu realmente não...
se alguem puder me dar um forçinha
Gostei + 0
04/11/2004
Luizneto
Gostei + 0
04/11/2004
Mrcdlf
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????????
Gostei + 0
04/11/2004
Mrcdlf
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
Gostei + 0
04/11/2004
Gameiro
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.
Gostei + 0
04/11/2004
Mrcdlf
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
Gostei + 0
05/11/2004
Luizneto
Gostei + 0
05/11/2004
Mrcdlf
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)