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!!
Mostrar linhas do Group By que não existem
-
- Rank: Programador Pleno
- Mensagens: 31
- Registrado em: Seg, 28 Abr 2008 1:51 pm
- Localização: São Bernardo do Campo - SP
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
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:
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.
Algo assim:
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
-
- Rank: Programador Pleno
- Mensagens: 31
- Registrado em: Seg, 28 Abr 2008 1:51 pm
- Localização: São Bernardo do Campo - SP
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!
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!
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
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...
Inté
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...
SELECT data, grupo, SUM( nvl(valor,) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
Faltou o zero...rs
SELECT data, grupo, SUM( nvl(valor,0) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
SELECT data, grupo, SUM( nvl(valor,0) )
WHERE grupo=1 AND data IN ('data1','data2')
GROUP BY data, grupo
-
- Rank: Programador Pleno
- Mensagens: 31
- Registrado em: Seg, 28 Abr 2008 1:51 pm
- Localização: São Bernardo do Campo - SP
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!
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!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes