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