SQL连接以复制符合特定条件的行

时间:2012-01-20 09:02:12

标签: sql sql-server join view reporting-services

我有一个视图可以回退46,712条记录,其中包括以下两个字段:

StartDate & 的结束日期

我需要添加一个名为'Period'的新列,在此列中我需要将每条记录列为'累积''非累积'

问题在于,首先我的所有记录都需要一个'累积'行,并且当前月份中有效的每条记录也必须有一个'非 - 累积'行。

适用于有资格被归类为非累积的记录的规则如下:

EndDate = NULL

当月内的EndDate

作为我的所有行,无论条件必须具有“累积”行,我必须使用某种JOIN复制任何符合“非累积”类型的行。

所以,如果我有46712行,其中200行是'非累积',我应该最终得到46,812行。 (200除了累积/非累积结果外,是重复的。

有没有人对我应该怎么做才有任何建议。

1 个答案:

答案 0 :(得分:4)

如果我理解了这个问题,那么这应该做你需要的。

Declare @rowType as table (rowTypeLabel nvarchar(20))
Insert Into @rowType 
Values ('Cumulative')
Insert Into @rowType 
Values ('Non-Cumulative')

Select StartDate, EndDate, rowTypeLabel As Period
From dbo.YourTable
        Cross Join @rowType
Where (@rowType = 'Cumulative'
        Or (@rowType = 'Non-Cumulative' And ( EndDate is null
                    Or 
                 EndDate Between 
                            Cast(DateAdd(Day, 1 - Day(getDate()), getdate()) as date)
                            And
                            Cast(DateAdd(month, 1, DateAdd(Day,  - Day(getDate()), getdate())) as date))
                )