;with d(date) as (
select cast('10/01/2012' as datetime)
union all
select date+1
from d
where date < '10/15/2012'
)
select t.ID, d.date CDate, isnull(t.val, 0) val
from d
left join temp t
on t.CDate = d.date
order by d.date
OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
Je moet de datums verzinnen, dus ik heb hier een recursieve algemene tabeluitdrukking gebruikt.SQL Fiddle
MAXRECURSION-nummer
Specificeert het maximum aantal toegestane recursies voor deze query. getal is een niet-negatief geheel getal tussen 0 en 32767. Als 0 is opgegeven, wordt er geen limiet toegepast. Als deze optie niet is opgegeven, is de standaardlimiet voor de server 100.
Wanneer het opgegeven of standaardgetal voor de MAXRECURSION-limiet wordt bereikt tijdens het uitvoeren van de query, wordt de query beëindigd en wordt er een fout geretourneerd.