我正在使用一个以月为单位存储数据的表。但是,对于许多项目,几个月内没有任何条目。如何为特定年份范围的缺失月份添加行(例如:2017年 - 2020年)?
这是我到目前为止所做的:
- 创建临时表以检索我想要填充行的范围的月份和年份:
DECLARE @months table (MonthNum int)
DECLARE @i int =1
WHILE (@i<=12)
BEGIN
INSERT INTO @months(MonthNum)
SELECT @i
SET @i=@i+1
END
DECLARE @YearsRange TABLE (MonthNum int, YearsRange int)
Insert Into @YearsRange (MonthNum, YearsRange)
(
select *, year(getdate()) as Years from @months
union
select *, year(getdate()) + 1 as Years from @months
union
select *, year(getdate()) + 2 as Years from @months
union
select *, year(getdate()) + 3 as Years from @months
)
select * from @YearsRange
表格结构:
- 红色的行是我期望的最终结果:
答案 0 :(得分:0)
首先,不要使用循环。您可以使用递归CTE
非常快速地执行此操作...
declare @start date = '20170101'
declare @end date = '20201201'
;with Rcte as(
select TheDate = @start
union all
select
dateadd(month,1,TheDate)
from
Rcte
where
TheDate < @end
)
select
*
from Rcte
full outer join --or using cross apply depending on what you are looking for
yourTable on AsOfDate = TheDate
您没有提供样本数据,因此我没有将日期分为月份和年份。但是你在这里得到了这个想法......