我们有一个包含以下数据的表
CustomerID 3rdPartyClientID ReasonA ReasonB ReasonC
0001 10001 AddressCheck NameCheck Null
0001 10001 NameCheck TakeOrder Feedback
0001 10002 TakeOrder Null Null
0002 10001 TakeOrder Null Null
0001 10002 AddressCheck NameCheck Null
部门希望输出为每个客户的一行,如下所示: -
CustomerID Notes
0001 10001 - AddressCheck, NameCheck, TakeOrder, Feedback, 10002 - AddressCheck, NameCheck, TakeOrder
0002 10001 - TakeOrder
当我有多个第三方客户端ID时,我很难在每个客户的“Notes”列中获取数据。任何帮助都会受到极大的欢迎。
答案 0 :(得分:1)
您可以一起使用CONCAT和GROUP_CONCAT
SELECT
GROUP_CONCAT(
CONCAT(`3rdPartyClientID`, ',', `ReasonA`, ',', `ReasonB`)
)
FROM [table]
GROUP BY `CustomerID`;
注意:强> NULL值将导致问题。在这种情况下,CONCAT将返回NULL。因此,修复NULL值或在QUERY中创建IF ELSE语句。
答案 1 :(得分:1)
您可以使用以下内容
select CustomerId, stuff((select ','+[3rdPartyClientId]+ ' - ' +coalesce([ReasonA],'')+coalesce([ReasonB],'')+coalesce([ReasonC],'') from yourdatetable i where a.CustomerId = i.amount for xml path('')),1,1, '')
from yourtable a
group by CustomerId
如果是SQL Server 2017或vnext,您可以使用String_agg,如下所示:
select CustomerId, string_agg([3rdPartyClientId]+ ' - ' +coalesce([ReasonA],'')+coalesce([ReasonB],'')+coalesce([ReasonC], ',')
from yourtable a
group by CustomerId