Voici un exemple utilisant une table de calendrier (que vous devriez vraiment avoir). Cet exemple ne remplit que 2014, mais vous pouvez le remplir avec autant d'années que vous le souhaitez ...
CREATE TABLE dbo.Calendar(d DATE PRIMARY KEY);
INSERT dbo.Calendar(d) SELECT TOP (365)
DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY number)-1, '20140101')
FROM [master].dbo.spt_values
WHERE [type] = N'P' ORDER BY number;
Maintenant, la requête est simple:
DECLARE @s DATE = '20140518', @e DATE = '20140527';
SELECT c.d, Frequency = COALESCE(s.Frequency,0)
FROM dbo.Calendar AS c
LEFT OUTER JOIN dbo.splunge AS s
ON c.d = s.[date]
WHERE c.d >= @s
AND c.d < DATEADD(DAY, 1, @e);
Exemple SQLfiddle
Si vous ne pouvez pas créer une table de calendrier (et que vous n'avez pas non plus de table de nombres à portée de main), vous pouvez simplement la mettre en ligne:
DECLARE @s DATE = '20140518', @e DATE = '20140527';
SELECT c.d, Frequency = COALESCE(s.Frequency,0)
FROM
(
SELECT TOP (DATEDIFF(DAY, @s, @e)+1)
DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY number)-1, @s)
FROM [master].dbo.spt_values
WHERE [type] = N'P' ORDER BY number
) AS c(d)
LEFT OUTER JOIN dbo.splunge2 AS s
ON c.d = s.[date]
WHERE c.d >= @s
AND c.d < DATEADD(DAY, 1, @e);
Exemple SQLfiddle
Pour en savoir plus sur les groupes électrogènes (de dates, nombres, etc.), consultez cette série: