GROUP BY组合/连接一列

时间:2013-03-01 09:42:16

标签: sql sql-server sql-server-2008 group-by

我有一张表如下:

ID  User  Activity  PageURL  
 1  Me    act1      ab     
 2  Me    act1      cd     
 3  You   act2      xy     
 4  You   act2      st

我希望按用户和活动进行分组,以便我最终得到类似的内容:

User  Activity  PageURL  
Me    act1      ab, cd     
You   act2      xy, st

正如您所看到的,PageURL列组合在一起,以逗号为基础,以逗号分隔。

非常感谢任何指示和建议。

2 个答案:

答案 0 :(得分:157)

SELECT
     [User], Activity,
     STUFF(
         (SELECT DISTINCT ',' + PageURL
          FROM TableName
          WHERE [User] = a.[User] AND Activity = a.Activity
          FOR XML PATH (''))
          , 1, 1, '')  AS URLList
FROM TableName AS a
GROUP BY [User], Activity

答案 1 :(得分:7)

  

一个好问题。应该告诉你,花了一些时间来破解这个。这是我的结果。

DECLARE @TABLE TABLE
(  
ID INT,  
USERS VARCHAR(10),  
ACTIVITY VARCHAR(10),  
PAGEURL VARCHAR(10)  
)

INSERT INTO @TABLE  
VALUES  (1, 'Me', 'act1', 'ab'),
        (2, 'Me', 'act1', 'cd'),
        (3, 'You', 'act2', 'xy'),
        (4, 'You', 'act2', 'st')


SELECT T1.USERS, T1.ACTIVITY,   
        STUFF(  
        (  
        SELECT ',' + T2.PAGEURL  
        FROM @TABLE T2  
        WHERE T1.USERS = T2.USERS  
        FOR XML PATH ('')  
        ),1,1,'')  
FROM @TABLE T1  
GROUP BY T1.USERS, T1.ACTIVITY