簡體   English   中英

sql server使用FOR XML PATH連接多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM