Sql 如何使用附加列将两条记录合并为一条记录

Sql 如何使用附加列将两条记录合并为一条记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,当我运行下面的查询时 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

当我运行下面的查询时

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 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.
我该怎么做? 谢谢

使用条件聚合:

注:

此查询仅适用于不超过2个辅助用户;否则,您将获得第一个和最后一个用户名,按字母顺序的全名排序

我将WHERE子句中的条件从16468中的MemberID更改为MemberID in=16468;当列表中有多个元素时,最好使用IN


当你有第四个或第五个所有者时会发生什么?你能保证最多只有三个吗?到目前为止,企业主最多输入两个所有者。我们将确定他们是否想要输入超过2个。谢谢~!
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.
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