Sum entre 2 tabelas

Firebird

16/06/2008

Ola pessoal, não estou conseguindo fazer uma consulta aqui, os valores não bate, alguém pode me ajudar. Obrigado dês de já,

Select m.codmensalidade, m.valor, m.codcliente,
m.valor +
((Select sum(mr1.valor) from mensalidadereajustereducao mr1
Where mr1.codmensalidade = m.codmensalidade and mr1.dc =´C´) -
(Select sum(mr2.valor) from mensalidadereajustereducao mr2
Where mr2.codmensalidade = m.codmensalidade and mr2.dc =´D´)) as ValorCobrar

from mensalidade m
Order by m.codmensalidade


Regismatos

Regismatos

Curtidas 0

Respostas

Regismatos

Regismatos

16/06/2008

A na tabela mensalidade tem o valor de 450,00


Na Tabela mensalidadereajustereducao = 50,00 ‘D’
Na Tabela mensalidadereajustereducao = ‘’ ‘C’ sem valor

O resultado é ´´ nada!?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/06/2008

tente assim:
Select
  m.codmensalidade, m.valor, m.codcliente,
  m.valor +
  ( (Select sum(coalesce(mr1.valor,0))
     from mensalidadereajustereducao mr1
     where mr1.codmensalidade = m.codmensalidade and mr1.dc = ´C´) -
    (Select sum(coalesce(mr2.valor,0))
     from mensalidadereajustereducao mr2
     Where mr2.codmensalidade = m.codmensalidade and mr2.dc =´D´)
  ) as ValorCobrar
from
  mensalidade m
Order by
  m.codmensalidade

note que o segredo é o uso da função coalesce().
possivelmente você não tem valores a debitar e/ou creditar, resultando NULL, e NULL não pode ser somado ou subtraído, anulando a conta.
com o uso do coalesce(), se o retorno for NULL, a função assumirá o valor 0 (zero), o que permitirá efetuar a conta normalmente.


GOSTEI 0
Regismatos

Regismatos

16/06/2008

Cara erra isso mesmo, só tive q mudar a forma de aplicar o coalesce(valor,0), ficou assim


Select m.*,
m.valororiginal +
(coalesce((Select sum(mr1.valor) from mensalidadereajustereducao mr1
Where mr1.codmensalidade = m.codmensalidade and mr1.dc =´C´),0)) -
(coalesce(
(Select sum(mr2.valor) from mensalidadereajustereducao mr2
Where mr2.codmensalidade = m.codmensalidade and mr2.dc =´D´),0)) as ValorCobrar
from mensalidade m
Where m.codcliente =:busca
Order by m.codmensalidade

Obrigado.... valeu!


GOSTEI 0
POSTAR