Página 1 de 1
Mostrar linhas do Group By que não existem
Enviado: Ter, 08 Jul 2008 5:53 pm
por raphaelias
Boa tarde pessoal,
minha dúvida é a seguinte, tenho uma tabela PAGAMENTO com o campo data, valor e grupo.
Quero fazer um comparativo entre duas datas de quanto foi pago em cada uma.
Então minha select ficou:
SELECT data, grupo, SUM(valor)
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
Porém se na data 2 não houver nenhum pagamento, não trará linha de resultado.
Como faço para mostrar uma linha com data, grupo e valor = 0??
Um abraço e obrigado à todos!!
Enviado: Qua, 09 Jul 2008 9:26 am
por dr_gori
Acho que uma forma de fazer isso é fazer um UNION ALL do seu select com um outro que tenha
todas datas e valor ZERO. Depois disso, fazer o GROUP BY.
Algo assim:
Selecionar tudo
SELECT data, grupo, SUM(valor)
FROM
(
SELECT data, grupo, valor
FROM TABELA
WHERE grupo=1
AND data >= 'data1'
AND data <= 'data2'
UNION ALL
SELECT TRUNC(SYSDATE) + ROWNUM-1, 1 grupo, 0
FROM ALL_OBJECTS
WHERE TRUNC(SYSDATE) + ROWNUM-1 >= 'data1'
and TRUNC(SYSDATE) + ROWNUM-1 <= 'data2'
)
GROUP BY data, grupo
Eu não testei aqui se funciona, mas acho que é uma idéia. (neste caso, ele está pegando uma FAIXA de data, de data1 até data2.
Enviado: Qui, 10 Jul 2008 2:13 pm
por raphaelias
Thomas,
Essa não é uma boa maneira pois não serão apenas 2 datas como no exemplo, mas serão quantas o usuário quizer.
Teria que ser, eu acho, em apenas uma query!
Obrigado, e um abraço!
Enviado: Qui, 10 Jul 2008 2:31 pm
por joaogarcia
Só um detalhe...
Confirme ai se quando não há valor o conteúdo é zero ou null...
Se for null ai acredito que isso resolva seu problema, pois estas funções (no caso SUM() ) ignoram null...
Selecionar tudo
SELECT data, grupo, SUM( nvl(valor,) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
Inté
Enviado: Qui, 10 Jul 2008 2:31 pm
por joaogarcia
Faltou o zero...rs
SELECT data, grupo, SUM( nvl(valor,0) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
Enviado: Qui, 10 Jul 2008 2:54 pm
por raphaelias
João,
Mesmo com o NVL ele não trará a linha pois não existe um registro nulo de pagamento naquela data.
O que pensei foi criar um select que me traga como resultado uma coluna com as datas, e com elas fazer um left join com a tabela pagamento, mas também não está dando certo.
Alguma outra sugestão?
Obrigado e abraço!