;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
Musisz wymyślić daty, więc użyłem tutaj rekurencyjnego wyrażenia tabelarycznego.SQL Fiddle
Numer MAXRECURSION
Określa maksymalną liczbę rekursji dozwolonych dla tego zapytania. number jest nieujemną liczbą całkowitą z zakresu od 0 do 32767. W przypadku określenia 0 nie jest stosowany żaden limit. Jeśli ta opcja nie jest określona, domyślnym limitem dla serwera jest 100.
Gdy określona lub domyślna liczba dla limitu MAXRECURSION zostanie osiągnięta podczas wykonywania zapytania, zapytanie zostanie zakończone i zostanie zwrócony błąd.