;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
Трябва да съставите датите, така че тук използвам рекурсивен израз на обща таблица.SQL Fiddle
MAXRECURSION номер
Указва максималния брой рекурсии, разрешени за тази заявка. числото е неотрицателно цяло число между 0 и 32767. Когато е посочено 0, не се прилага ограничение. Ако тази опция не е посочена, ограничението по подразбиране за сървъра е 100.
Когато посоченият номер или номер по подразбиране за ограничение MAXRECURSION бъде достигнат по време на изпълнение на заявката, заявката приключва и се връща грешка.