För det första låter det som att din ansökan skulle ha nytta av en kalendertabell. En kalendertabell är en lista över datum och information om datumen.
För det andra kan du göra detta utan att använda tillfälliga tabeller. Här är tillvägagångssättet:
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
Här är idén. Aliaskonstanterna registrerar det tidigaste datumet i din tabell. Aliasdatum skapar sedan en sekvens av datum. Den inre underfrågan beräknar en sekvens av heltal, med hjälp av rownum, och lägger sedan till dessa till det första datumet. Observera att detta förutsätter att du i genomsnitt har minst en transaktion per datum. Om inte kan du använda ett större bord.
Den sista delen är sammanfogningen som används för att få tillbaka information om datumen. Notera användningen av count(t.date) istället för count(*). Detta räknar antalet poster i din tabell, vilket bör vara 0 för datum utan data.