;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
日付を作成する必要があるため、ここでは再帰共通テーブル式を使用しました。SQLFiddle
MAXRECURSION番号
このクエリで許可される再帰の最大数を指定します。 numberは、0から32767までの非負の整数です。0が指定されている場合、制限は適用されません。このオプションが指定されていない場合、サーバーのデフォルトの制限は100です。
queryの実行中にMAXRECURSION制限の指定された数またはデフォルトの数に達すると、クエリは終了し、エラーが返されます。