[英]sql server Concatenate Multiple Rows Using FOR XML PATH
我在實現連接多行的XML PATH方法時遇到了一些麻煩。 因此,鑒於以下sql-table,temptable
user | userid | email | group
a usera a@a.com admin
a usera a@a.com test
a usera a@a.com edit
b userb b@a.com read
b userb b@a.com write
c userc c@c.com read
c userc c@c.com write
我收到以下代碼:
SELECT a.[user],
STUFF((SELECT ', ' + [group] [text()]
FROM [temptable]
WHERE [user] = a.[user]
for XML PATH (''),TYPE).
value('.','NVARCHAR(MAX)'),1,2,'') AS [group]
FROM [temptable] as a
GROUP BY a.[user]
結果:
user | group
a admin,test,edit
b read,write
c read,write
但是我需要這個
user | userid | email | group
a usera a@a.com admin,test,edit
b userb b@a.com read,write
c userc c@c.com read,write
只需在group by
子句中包括其他列:
SELECT a.[user], userid, email,
STUFF((SELECT ', ' + [group] [text()]
FROM [temptable]
WHERE [user] = a.[user]
FOR XML PATH (''),TYPE).value('.','NVARCHAR(MAX)'),1,2,''
) AS [group]
FROM [temptable] AS a
GROUP BY a.[user], userid, email;
但是, DISTINCT
也可以解決您的問題:
SELECT DISTINCT a.[user], userid, email,
STUFF((SELECT ', ' + [group] [text()]
FROM [temptable]
WHERE [user] = a.[user]
FOR XML PATH (''),TYPE).value('.','NVARCHAR(MAX)'),1,2,''
) AS [group]
FROM [temptable] AS a;
試試下面
SELECT a.[user],a.userid,a.email
STUFF((SELECT ', ' + [group] [text()]
FROM [temptable] b on a.[user]=b.[user]
for XML PATH (''),TYPE).
value('.','NVARCHAR(MAX)'),1,2,'') AS [group]
FROM [temptable] as a
GROUP BY a.[user],a.userid,a.email
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.