Mostrar linhas do Group By que não existem

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Ter, 08 Jul 2008 5:53 pm

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!!
raphaelias
Localização: São Bernardo do Campo - SP

Mensagemem Qua, 09 Jul 2008 9:26 am

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:
Código: Selecionar todos
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
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Qui, 10 Jul 2008 2:13 pm

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!
raphaelias
Localização: São Bernardo do Campo - SP

Mensagemem Qui, 10 Jul 2008 2:31 pm

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...

Código: Selecionar todos
SELECT data, grupo, SUM( nvl(valor,) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo


Inté
joaogarcia
Localização: Campinas - SP

Cordialmente,
João C. Garcia

Mensagemem Qui, 10 Jul 2008 2:31 pm

Faltou o zero...rs

SELECT data, grupo, SUM( nvl(valor,0) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
joaogarcia
Localização: Campinas - SP

Cordialmente,
João C. Garcia

Mensagemem Qui, 10 Jul 2008 2:54 pm

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!
raphaelias
Localização: São Bernardo do Campo - SP



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes