Как объединить две записи в одну с дополнительным столбцом - PullRequest
0 голосов
/ 19 сентября 2019

Когда я запускаю запрос ниже

SELECT 
 ML.MemberID
,ML.effective_date
,CL.CaseID
,CL.CaseName
,CL.StartDate AS CaseCreatedDate    
,CONCAT(U.firstname,' ', U.lastname) AS PrimaryCaseOwner
,CONCAT(U2.firstname,' ', U2.lastname) AS SecondaryCaseOwner
FROM #MemberList ML
    INNER JOIN vw_CaseList CL 
        ON ML.member_id = CL.member_id
        AND CL.StartDate < GETDATE() 
        AND (CL.EndDate IS NULL OR CL.EndDate > GETDATE() )
    INNER JOIN Users U ON CL.primary_owner_id = U.[user_id]
    LEFT JOIN Cases_SecondaryOwners S ON CL.case_id = S.case_id
    LEFT JOIN Users U2 ON S.[user_id] = U2.[user_id] 
    where MemberID in ( 16468)  
ORDER BY MemberName, CaseCreatedDate

Он возвращает это:

MemberID  :  Effective_Date : CaseID : CaseName : CaseDate : CaseOwner : 2nd Owner
45555          6/2/2019        0002     General   8/11/2019    John A.
45555          7/31/2019       0003     Special   9/1/2019     Jimmy       Tyler
45555          7/31/2019       0003     Special   9/1/2019     Jimmy       John A.

Но я бы хотел получить такой результат:

MemberID  :  Effective_Date : CaseID : CaseName : CaseDate : CaseOwner : 2nd Owner1 : 2nd Owner2
45555          6/2/2019        0002     General   8/11/2019    John A.
45555          7/31/2019       0003     Special   9/1/2019     Jimmy       Tyler       John A.

Как я могу это сделать?Спасибо!

1 Ответ

0 голосов
/ 19 сентября 2019

Использование условное агрегирование :

SELECT 
     ML.MemberID
    ,ML.effective_date
    ,CL.CaseID
    ,CL.CaseName
    ,CL.StartDate AS CaseCreatedDate    
    ,CONCAT(U.firstname,' ', U.lastname) AS PrimaryCaseOwner
    MIN(CONCAT(U2.firstname,' ', U2.lastname)) AS SecondaryCaseOwner1,
    CASE 
        WHEN MIN(U2.[user_id]) != MAX(U2.[user_id])
        THEN MAX(CONCAT(U2.firstname,' ', U2.lastname)) 
    END AS SecondaryCaseOwner2
FROM #MemberList ML
    INNER JOIN vw_CaseList CL 
        ON ML.member_id = CL.member_id
        AND CL.StartDate < GETDATE() 
        AND (CL.EndDate IS NULL OR CL.EndDate > GETDATE() )
    INNER JOIN Users U ON CL.primary_owner_id = U.[user_id]
    LEFT JOIN Cases_SecondaryOwners S ON CL.case_id = S.case_id
    LEFT JOIN Users U2 ON S.[user_id] = U2.[user_id] 
WHERE MemberID in = 16468
GROUP BY
     ML.MemberID
    ,ML.effective_date
    ,CL.CaseID
    ,CL.CaseName
    ,CL.StartDate AS CaseCreatedDate    
    ,U.firstname
    ,U.lastname
ORDER BY MemberName, CaseCreatedDate

Примечания:

  • этот запрос имеет смысл только при наличии не более 2 вторичных пользователей;иначе вы получите первое и последнее имена пользователей, отсортированные по алфавитным полным именам

  • Я изменил условие в предложении WHERE с MemberID in IN (16468) на MemberID in = 16468;IN лучше использовать, когда в списке несколько элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...