;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
Devi inventare le date, quindi ho usato un'espressione di tabella comune ricorsiva qui.SQL Fiddle
numero MAXRECURSION
Specifica il numero massimo di ricorsioni consentite per questa query. numero è un numero intero non negativo compreso tra 0 e 32767. Quando viene specificato 0, non viene applicato alcun limite. Se questa opzione non è specificata, il limite predefinito per il server è 100.
Quando viene raggiunto il numero specificato o predefinito per il limite MAXRECURSION durante l'esecuzione della query, la query viene terminata e viene restituito un errore.