;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
Anda perlu membuat tanggal, jadi saya menggunakan ekspresi tabel umum rekursif di sini.SQL Fiddle
MAXRECURSION nomor
Menentukan jumlah maksimum rekursi yang diizinkan untuk kueri ini. nomor adalah bilangan bulat nonnegatif antara 0 dan 32767. Ketika 0 ditentukan, tidak ada batas yang diterapkan. Jika opsi ini tidak ditentukan, batas default untuk server adalah 100.
Ketika nomor yang ditentukan atau default untuk batas MAXRECURSION tercapai selama eksekusi kueri, kueri diakhiri dan kesalahan dikembalikan.