如何从我创建的查询中插入缺失的日期。结果如下:
Date Frequency
2014-05-18 5
2014-05-20 7
2014-05-25 7
2014-05-27 6
Run Code Online (Sandbox Code Playgroud)
我希望结果缺少值为 0 的日期,如下所示:
Date Frequency
2014-05-18 5
2014-05-19 0
2014-05-20 7
2014-05-21 0
2014-05-22 0
2014-05-23 0
2014-05-24 0
2014-05-25 7
2014-05-26 0
2014-05-27 6
Run Code Online (Sandbox Code Playgroud)
请注意,我对服务器具有只读访问权限。
Aar*_*and 14
这是一个使用日历表的示例(您确实应该拥有)。此示例仅填充 2014 年,但您可以根据需要填充任意数量的年份...
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;
Run Code Online (Sandbox Code Playgroud)
现在查询很简单:
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);
Run Code Online (Sandbox Code Playgroud)
如果您无法创建日历表(并且手头也没有数字表),那么您可以将其内联:
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);
Run Code Online (Sandbox Code Playgroud)
有关生成集(日期、数字等)的更多信息,请参阅本系列:
归档时间: |
|
查看次数: |
18161 次 |
最近记录: |