我有一个非常简单的查询,它有两个日期(开始和结束日期,例如:01/01 / 2018-01 / 31/2018),然后取出开始和结束日期的周数(例如:1和5)。我使用while循环以在一个表中输入所有周数(例如:1,2,3,4,5)。我的while循环正在创建重复记录,例如所有值的多个记录。我不确定是什么问题。有人可以建议我可能做错了吗?
代码:
DECLARE @StartDate datetime = '01/01/2018'
,@EndDate datetime = '01/31/2018'
DECLARE @StartDateWeek INT = DATEPART(WK,@StartDate)
,@EndDateWeek INT = DATEPART(WK,@EndDate)
SELECT @StartDateWeek,@EndDateWeek
DECLARE @DateRangeWeekList TABLE(
Date DATE
,WeekNumber INT)
INSERT INTO @DateRangeWeekList
SELECT Date = @StartDate
,WeekNumber = @StartDateWeek
select * from @DateRangeWeekList
WHILE (SELECT MAX(WeekNumber) FROM @DateRangeWeekList) < (SELECT @EndDateWeek)
BEGIN
INSERT INTO @DateRangeWeekList
SELECT Date = null
,WeekNumber = WeekNumber +1
FROM @DateRangeWeekList
END
select * from @DateRangeWeekList
结果:
Date WeekNumber
2018-01-01 1
NULL 2
NULL 2
NULL 3
NULL 2
NULL 3
NULL 3
NULL 4
NULL 2 and more (total 18 records)
预期结果
Date WeekNumber
2018-01-01 1
NULL 2
NULL 3
NULL 4
NULL 5
答案 0 :(得分:3)
这里的递归CTE要比%quickref
循环好得多:
WHILE
但是,您也可以考虑使用Calendar表。那里有很多选择。
答案 1 :(得分:1)
也许您可以尝试使用此格式插入您的值。
INSERT INTO @DateRangeWeekList (Date, WeekNumber)
VALUES (null, WeekNumber +1)