Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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...
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:
talvez tenha um teste do tipo
...
and valor is not null
...
Motta, creio que testes assim não me dariam o resultado que eu quero porque só retornariam resultados que realmente existissem ...
Estou pesquisando mais
Publica seu sql
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"
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"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:
http://forum.imasters.com.br/topic/302966-resolvido-montagem-de-perodo/#entry1114537
Eu não faria a VIEW usaria uma tabela "fajuta" para montar as datas.
Quanto a montar as datas é questão de arrumar.
Motta, obrigado.
com sua dica resolvi a parada! :)
Me parece que um outer join resolve o problema, se não publica a sql aqui.