Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Mostrar dados da tabela mesmo que não haja dados!! Oráculo


Primeiro, parece que seu aplicativo se beneficiaria de uma tabela de calendário. Uma tabela de calendário é uma lista de datas e informações sobre as datas.

Segundo, você pode fazer isso sem usar tabelas temporárias. Aqui está a abordagem:
with constants as (select min(thedate>) as firstdate from <table>)
     dates as (select( <firstdate> + rownum - 1) as thedate
               from (select rownum
                     from <table> cross join constants
                     where rownum < sysdate - <firstdate> + 1
                    ) seq
              )
select dates.thedate, count(t.date)
from dates left outer join
     <table> t
     on t.date = dates.thedate
group by dates.thedate

Aqui está a ideia. As constantes de alias registram a data mais antiga em sua tabela. As datas do alias criam uma sequência de datas. A subconsulta interna calcula uma sequência de inteiros, usando rownum, e os adiciona à primeira data. Observe que isso pressupõe que você tenha, em média, pelo menos uma transação por data. Se não, você pode usar uma mesa maior.

A parte final é a junção que é usada para trazer de volta informações sobre as datas. Observe o uso de count(t.date) em vez de count(*). Isso conta o número de registros em sua tabela, que deve ser 0 para datas sem dados.