Compter le groupe par date zéro résultat

J'ai ce SQL pour get un rapport:

select count(id_reg) total, YEAR(fechaingreso) ano, MONTH(fechaingreso) mes, DAY(fechaingreso) Dia from vw_casos_tc where fechaingreso between '2012-12-05' and '2013-5-8' group by DAY(fechaingreso), MONTH(fechaingreso), YEAR(fechaingreso) order by Ano, Mes, dia 

Cela fonctionne bien sauf pour les JOURS qui n'ont pas d'loggings quand count (id_reg) = 0, ce jour n'apparaît pas sur mon résultat.

 total ano mes dia ----------------------------- 66 2012 12 13 22 2012 12 14 23 2012 12 17 

Il n'y a pas de résultat pour (2012 12 15 et 2012 12 16). Comment puis-je modifier mon script pour get ce jour avec total = 0?

Voici un moyen, en supposant que SQL Server 2008 (même si vous pouvez facilement le modifier pour SQL Server 2005):

 DECLARE @StartDate DATE, @EndDate DATE SET @StartDate = '20121205' SET @EndDate = '20130508'; WITH AllDays AS ( SELECT @StartDate YourDate UNION ALL SELECT DATEADD(DAY,1,YourDate) FROM AllDays WHERE DATEADD(DAY,1,YourDate) <= @EndDate ) SELECT A.YourDate, ISNULL(B.Total,0) Total FROM AllDays A LEFT JOIN ( SELECT CONVERT(DATE,fechaingreso) YourDate, COUNT(id_reg) Total FROM vw_casos_tc WHERE fechaingreso >= @StartDate AND fechaingreso < DATEADD(DAY, 1, @EndDate) GROUP BY CONVERT(DATE,fechaingreso)) B ON A.YourDate = B.YourDate OPTION(MAXRECURSION 0)