;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
Du skal finde på datoerne, så jeg har brugt et rekursivt almindeligt tabeludtryk her.SQL Fiddle
MAXRECURSION nummer
Angiver det maksimale antal tilladte rekursioner for denne forespørgsel. tal er et ikke-negativt heltal mellem 0 og 32767. Når 0 er angivet, anvendes der ingen grænse. Hvis denne indstilling ikke er angivet, er standardgrænsen for serveren 100.
Når det angivne eller standardnummer for MAXRECURSION-grænsen nås under udførelse af forespørgsel, afsluttes forespørgslen, og der returneres en fejl.