Hier ist ein Beispiel mit einer Kalendertabelle (die Sie wirklich haben sollten). Dieses Beispiel füllt nur 2014, aber Sie können es mit so vielen Jahren füllen, wie Sie möchten ...
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;
Jetzt ist die Abfrage einfach:
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);
SQLfiddle-Beispiel
Wenn Sie keine Kalendertabelle erstellen können (und auch keine Zahlentabelle zur Hand haben), können Sie sie einfach inline setzen:
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);
SQLfiddle-Beispiel
Weitere Informationen zu Generierungssätzen (von Datumsangaben, Zahlen usw.) finden Sie in dieser Reihe: