Pregunta GROUP BY para combinar / concaturar una columna [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Tengo una mesa como sigue:

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

Quiero agrupar por Usuario y Actividad de modo que termine con algo como:

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

Como puede ver, la columna PageURL se combina entre sí, separada por una coma basada en el grupo por.

Realmente apreciaría cualquier consejo y consejos.


74
2018-03-01 09:42


origen


Respuestas:


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

141
2018-03-01 09:45



Una buena pregunta. Debería decirte que tardó un tiempo en descifrar este. Aquí está mi resultado.

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

5
2018-03-01 12:01