添加几年SQL Server 2008 R2中缺少的行数

时间:2017-09-12 16:14:39

标签: reporting-services sql-server-2008-r2 pivot

我正在使用一个以月为单位存储数据的表。但是,对于许多项目,几个月内没有任何条目。如何为特定年份范围的缺失月份添加行(例如: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

表格结构:

- 红色的行是我期望的最终结果:

enter image description here

1 个答案:

答案 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

您没有提供样本数据,因此我没有将日期分为月份和年份。但是你在这里得到了这个想法......