Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SHOW ALL Datas entre duas datas; se nenhuma linha existir para uma data específica, mostre zero em todas as colunas

;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

Você precisa criar as datas, então usei uma expressão de tabela comum recursiva aqui.SQL Fiddle

MAXRECURSION número

Especifica o número máximo de recursões permitidas para esta consulta. number é um inteiro não negativo entre 0 e 32767. Quando 0 é especificado, nenhum limite é aplicado. Se esta opção não for especificada, o limite padrão para o servidor é 100.

Quando o número especificado ou padrão para o limite MAXRECURSION é atingido durante a execução da consulta, a consulta é encerrada e um erro é retornado.