我有一张表,其中行的日期为周的星期几。一些连续的行可能没有连续的周期,因此它们之间存在间隙。此图像将清除这种情况:
从图像中可以清楚地看出,2016-08-08和2016-09-05周末之间存在差距,因为行周期为'2016-08-15','2016-08-22','2016-08 -29'在'2016-09-05'之前不存在。
那么,我如何用所有这些日期的行填充这个空白,并为剩下的两列填充null?
答案 0 :(得分:1)
使用计数表
CTE
创建一个即时。 您可以尝试使用此代码,该代码将生成星期一列表
DECLARE @start INT=0;
DECLARE @end INT=20;
DECLARE @step INT=7;
WITH x AS(SELECT 1 AS N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS tbl(N))--10^1
,N3 AS (SELECT 1 AS N FROM x CROSS JOIN x AS N2 CROSS JOIN x N3) --10^3
,Tally AS(SELECT TOP(@end-@start +1) (ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) + @start -1) * @step AS Nr FROM N3
CROSS JOIN N3 N6 CROSS JOIN N3 AS N9)
SELECT DATEADD(DAY,Nr,{d'2016-08-01'}) AS Monday
FROM Tally
您可以使用@start
和@end
指定生成的行数,@step
在您的情况下应为7。这将在给定日期(在您的情况下应该是星期一)添加0,7,14,21 ......。
现在使用LEFT JOIN
将其与您的表格数据相结合。这应该会产生所有星期一的无间隙列表以及值 - 如果有的话......
答案 1 :(得分:0)