Oracle
 sql >> Database >  >> RDS >> Oracle

Mostra i dati dalla tabella anche se non ci sono dati!! Oracolo

Innanzitutto, sembra che la tua applicazione possa trarre vantaggio da una tabella del calendario. Una tabella del calendario è un elenco di date e informazioni sulle date.

In secondo luogo, puoi farlo senza utilizzare tabelle temporanee. Ecco l'approccio:

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

Ecco l'idea. Le costanti alias registrano la prima data nella tabella. L'alias date crea quindi una sequenza di date. La sottoquery interna calcola una sequenza di numeri interi, utilizzando rownum, quindi li aggiunge alla prima data. Tieni presente che questo presuppone che tu abbia in media almeno una transazione per data. In caso contrario, puoi utilizzare un tavolo più grande.

La parte finale è il join utilizzato per riportare informazioni sulle date. Nota l'uso di count(t.date) invece di count(*). Questo conta il numero di record nella tua tabella, che dovrebbe essere 0 per le date senza dati.