Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gustavo_RJ

Forçar Select trazer linha mesmo que sem valor

Recommended Posts

Pessoal, estou querendo fazer com que o resultado da minha consulta traga uma linha mesmo que sem resultado, algo assim:

 

(Registros que realmente existem na tabela)

Data Valor_Tributo

 

15/04/2014 100,00

16/06/2014 90,00

28/09/2014 150,00

 

para algo como

 

Data Valor_Tributo

15/04/2014 100,00

16/04/2014

17/04/2014

18/04/2014

19/04/2014

20/04/2014

... assim por diante

25/05/2014

16/06/2014 90,00

17/06/2014

18/06/2014

19/06/2014

..e continua...

27/06/2014

28/09/2014 150,00

 

ou seja mesmo que não tenha tributo nos dias 25 e 27 (logo não tem a data também) eu queria trazer a linha..

 

eu pensei em unir minha tabela com algo como sysdate, alguma tabela que já tivesse algum registro em todas as datas possíveis só para pegar a data e tal, seria esse o caminho?

 

Obs: o relatório normalmente terá tanto passadas e futuras...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala aí Motta!

Mas outer join com qual tabela?

 

pq neste caso eu tenho apenas uma tabela de tributos que constam os tributos lançados e tal, tem data, valor do tributo e mais uns campos apenas, e precisaria listar estes tributos, porém por uma situação específica preciso listar (no período que for pesquisado) as linhas também que não tem tributo para FICAR EXPLÍCITO PARA ESTE USUÁRIO que não tem tributos nestas datas :pinch:

Compartilhar este post


Link para o post
Compartilhar em outros sites

talvez tenha um teste do tipo

...
and valor is not null
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, creio que testes assim não me dariam o resultado que eu quero porque só retornariam resultados que realmente existissem ...

 

Estou pesquisando mais

Compartilhar este post


Link para o post
Compartilhar em outros sites
Segue:



SELECT

E2_NUM "NUMERO",
TO_DATE(E2_VENCREA,'YYYYMMDD') "VENCIMENTO REAL",
CALENDARIO.DATAS


FROM SE2020 SE2, SA2020 SA2, ( SELECT to_char( ( TRUNC(SYSDATE) - ROWNUM ), 'yyyymmdd' ) DATAS
FROM ALL_OBJECTS WHERE to_char( ( TRUNC(SYSDATE) - ROWNUM ), 'yyyymmdd' ) > '201406') CALENDARIO



ON SA2.A2_COD = E2_FORNECE
AND SA2.A2_LOJA = E2_LOJA
AND SA2.A2_FILIAL = E2_FILIAL
AND SA2.d_e_l_e_t_ = ' '

SE2.E2_VENCREA (+) > '201405'
SE2.E2_VENCREA (+) = CALENDARIO.DATAS

WHERE SE2.E2_VENCREA BETWEEN '20140609' AND '20140610' AND E2_SALDO > 0 AND SE2.D_E_L_E_T_ = ' '


ORDER "VENCIMENTO REAL"

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT VENCIMENTO_REAL,
       SUM(VALOR)
FROM
(
SELECT  ( TRUNC(SYSDATE) - ROWNUM ) VENCIMENTO_REAL,
       0 valor
FROM ALL_OBJECTS
WHERE TO_CHAR( ( TRUNC(SYSDATE) - ROWNUM ), 'yyyymmdd' ) > '201406'
union all
SELECT  TO_DATE(E2_VENCREA,'YYYYMMDD') VENCIMENTO_REAL,
        sum(e2_valor) valor
FROM   SE2020 SE2, SA2020 SA2        
WHERE  SA2.A2_COD     = E2_FORNECE
AND    SA2.A2_LOJA    = E2_LOJA
AND    SA2.A2_FILIAL  = E2_FILIAL --atencao aqui
AND    SA2.D_E_L_E_T_ = ' '
AND    SE2.E2_VENCREA BETWEEN '20140601' AND '20140613'  
AND    SE2.D_E_L_E_T_ = ' '
GROUP BY TO_DATE(E2_VENCREA,'YYYYMMDD')     
) VIRTUAL
GROUP BY VENCIMENTO_REAL
order by 1

Costumo fazer estas coisas com um union "zerado"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, enquanto você respondia eu continuei tentando, cheguei a outra solução mas tanto a minha quanto a sua tem um problema que não tem a haver com o objetivo principal do post q era trazer as linhas mesmo sem valor, isso a sua solução e a minha fizeram. considero então a dúvida do post sanada!

 

porém para a solução do meu problema notei que utilizar

 

SELECT ( TRUNC(SYSDATE) - ROWNUM ) VENCIMENTO_REAL,
0 valor
FROM ALL_OBJECTS
WHERE TO_CHAR( ( TRUNC(SYSDATE) - ROWNUM ), 'yyyymmdd' ) > '201406'
só me são retornadas datas entre 01/06/2014 e 16/06/2014 (data de ontem), mesmo q eu coloque por exemplo > '201401' apenas estaria alterando a data inicial mas o teto continuaria sendo 16/06/2014...
Acha que seria uma boa criar uma view e popular até 2020 com campos data e valor = 0 e unir com a consulta como vc fez? eu não conheço nenhuma tabela no banco que poderia ter datas a frente como preciso..
Precisava trazer datas tipo até 2020 :innocent:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.