Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

AFFICHER TOUT Données de dates entre deux dates ; si aucune ligne n'existe pour une date particulière, affichez zéro dans toutes les colonnes

;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

Vous devez inventer les dates, j'ai donc utilisé ici une expression de table commune récursive.SQL Fiddle

Numéro MAXRECURSION

Spécifie le nombre maximal de récursions autorisées pour cette requête. nombre est un entier non négatif compris entre 0 et 32767. Lorsque 0 est spécifié, aucune limite n'est appliquée. Si cette option n'est pas spécifiée, la limite par défaut pour le serveur est de 100.

Lorsque le nombre spécifié ou par défaut pour la limite MAXRECURSION est atteint lors de l'exécution de la requête, la requête est terminée et une erreur est renvoyée.