SQL присоединяется к дублирующимся строкам, которые соответствуют определенным критериям - PullRequest
1 голос
/ 20 января 2012

У меня есть представление, которое возвращает 46 712 записей, которые включают следующие 2 поля:

StartDate & EndDate

Мне нужно добавить новый столбец, который будет называться «Период», в этом столбце мне нужно, чтобы каждая запись была указана как «Накопительная» или «Не кумулятивная»

Проблема в том, что сначала все мои записи должны иметь строку 'Cumulative' , и каждая запись, которая активна в текущем месяце, также должна иметь 'Non-Cumulative строка.

Правила, применяемые к записи, которая может быть классифицирована как Не кумулятивно , следующие:

EndDate = NULL

EndDate в течение текущего месяца

Поскольку все мои строки, независимо от того, какие критерии должны иметь строку «Накопительный», я должен поэтому продублировать все строки, которые соответствуют типу «Накопительный», используя некоторый тип JOIN.

Так что, если у меня 46712 строк и 200 из них «Не кумулятивно» , я должен получить 46 812 строк. (200 является дубликатом, кроме кумулятивного / не кумулятивного результата.

У кого-нибудь есть предложения, как мне поступить?

1 Ответ

4 голосов
/ 20 января 2012

Если я понимаю вопрос, тогда это должно делать то, что вам нужно.

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))
                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...