STUFF, UNPIVOT и группа By в отношении данных - PullRequest
0 голосов
/ 07 мая 2018

Фактические данные в следующем формате:

Id       |  Disclosure  | Photo DisclosureDate | Community Trip Disclosure | Assum Of Risk Disclosure | Release Of Info | Photo DisclosureDate
1        |   2017-05-03 | 2017-05-03           | 2017-05-03                | 2017-05-03               | 2017-05-03      | 2017-05-03
2        |   2017-05-03 | 2017-05-03           | 2017-05-03                | 2017-05-03               | 2017-05-03      | 2017-05-03

Использовал UNPIVOT для получения данных в отдельных строках для каждого столбца (даты могут отличаться, поэтому для каждой уникальной даты требуются имена столбцов, разделенных запятыми):

SELECT Id, t1.ExpiringOn ,DisclouserName
    FROM (SELECT Id, ParticipantName, ExpiringOn, DisclouserName FROM (
        SELECT P.Id, P.LastName + ', ' + P.FirstName as 'ParticipantName', TSL.PhotoDisclosureDate, TSL.CommunityTripDisclosureDate, TSL.AssumOfRiskDisclosureDate, TSL.ReleaseOfInfoDate, TSL.DisclosureDate
        FROM RegistrationDisclosures AS TSL
        INNER JOIN RegistrationParticipantInfo AS P with (nolock) ON P.Id = TSL.ParticipantId 
        where P.IsActive = 1 and (TSL.PhotoDisclosureDate < GETDATE() or TSL.CommunityTripDisclosureDate < GETDATE() or TSL.AssumOfRiskDisclosureDate < GETDATE() or TSL.ReleaseOfInfoDate < GETDATE() or TSL.DisclosureDate < GETDATE())
    ) d
    UNPIVOT
    (
        ExpiringOn for DisclouserName in (PhotoDisclosureDate, CommunityTripDisclosureDate, AssumOfRiskDisclosureDate, ReleaseOfInfoDate, DisclosureDate)
    ) upvt) t1

Результат с использованием UNPIVOT:

Id       |  Expiring Date  | Disclouser
1        |   2017-05-03    | Photo DisclosureDate
1        |   2017-05-03    | Community Trip Disclosure
1        |   2017-06-03    | Assum Of Risk Disclosure
1        |   2017-06-03    | Release Of Info
2        |   2017-07-03    | Photo DisclosureDate

Ожидаемый результат:

Id       |  Expiring Date  | Disclouser
1        |   2017-05-03    | Photo DisclosureDate, Community Trip Disclosure
1        |   2017-06-03    | Assum Of Risk Disclosure, Release Of Info
2        |   2017-07-03    | Photo DisclosureDate

Попытка использовать STUFF, но не удается сгруппировать элементы в команде STUFF.

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, что вы хотите:

WITH x as (<your query here>)
SELECT x.id, x.expiringon,
       STUFF( (SELECT ', ' + DisclouserName
               FROM x x2
               WHERE x2.id = x.id
               FOR XML PATH ('')
              ), 1, 2, ''
            )
FROM (SELECT DISTINCT id, expiringon FROM x) x;

Это версия XML для конкатенации агрегированных строк. В последней версии SQL Server наконец-то появилась функция агрегирования string_agg().

...