2011-03-27 16 views
13

En mi base de datos SQL Server 2005, utilizando una consulta SLQ, ¿alguien sabe la mejor manera de agrupar registros por un campo y obtener una lista de valores separados por comas de otro?
lo que si tengo:SQL: Agrupar cadenas juntas

UserID  Code 
    1   A 
    1   C5 
    1   X 
    2   V3 
    3   B 
    3   D 
    3   NULL 
    3   F4 
    4   NULL 

me gustaría obtener:

UserID  Code 
    1   A,C5,X 
    2   V3 
    3   B,D,F4 
    4   NULL 

Gracias por cualquier ayuda.

+0

posible duplicado de [Cómo usar GROUP BY para concatenar cadenas en SQL Server?] (Http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server) – Dar

Respuesta

16
WITH Data AS (
    SELECT 1 UserId, 'A' Code 
    UNION ALL 
    SELECT 1, 'C5' 
    UNION ALL 
    SELECT 1, 'X' 
    UNION ALL 
    SELECT 2, 'V3' 
    UNION ALL 
    SELECT 3, 'B' 
    UNION ALL 
    SELECT 3, 'D' 
    UNION ALL 
    SELECT 3, NULL 
    UNION ALL 
    SELECT 3, 'F4' 
    UNION ALL 
    SELECT 4, NULL 
) 
SELECT U.UserId, STUFF((
    SELECT ','+Code FROM Data WHERE Data.UserID = U.UserID FOR XML PATH('') 
), 1, 1, '') Code 
FROM (SELECT DISTINCT UserID FROM Data) U 

Simplemente reemplace el Data CTE con el nombre de su tabla y listo.

+0

+1 Sí, esto se ve mejor en este momento. –

+1

-1 por no cumplir con la salida (esto fallaría una pregunta del concurso de programación de ACM). La salida tiene ',' no ',' como delimitador – RichardTheKiwi

+0

@Richard, espero que hayas obtenido algo de satisfacción por eso ... De todos modos, lo arreglé, gracias por la pista. – Lucero

Cuestiones relacionadas