Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

MOSTRA TUTTO Dati tra due date; se non esiste alcuna riga per una data particolare, mostra zero in tutte le colonne

;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.