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.

:-o

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!