2012-10-01 21 views
50

Duplicar posibles:
SQL group_concat function in SQL ServerSQL Server: cláusula GROUP BY para obtener valores separados por comas

Busco para crear una consulta pero de alguna manera no estoy en condiciones de hacerlo. ¿Puede alguien ayudarme aquí?

Los datos originales

ID ReportId  Email 
1  1   [email protected] 
2  2   [email protected] 
3  1   [email protected] 
4  3   [email protected] 
5  3   [email protected] 

que quieren agrupar por ReportId, pero todo el correo electrónico deben estar separados por comas. Entonces el resultado debería ser:

ReportId  Email 
1   [email protected], [email protected] 
2   [email protected] 
3   [email protected], [email protected] 

¿Cuál es la mejor manera de hacerlo?

Estoy intentando la cláusula group by pero si hay algo más, entonces estoy abierto a implementar eso también. Realmente aprecio tu tiempo y ayuda en esto. Gracias.

+0

y [sql-grupo-concat-function-en-sql-server] (http: //stackoverflow.com/questions/8868604/sql-group-concat-function-in-sql-server) – gts

Respuesta

112

Prueba esto:

SELECT ReportId, Email = 
    STUFF((SELECT ', ' + Email 
      FROM your_table b 
      WHERE b.ReportId = a.ReportId 
      FOR XML PATH('')), 1, 2, '') 
FROM your_table a 
GROUP BY ReportId 


SQL fiddle demo

+1

Muchas gracias .... – user867198

+1

superbbbbbb ........ –

+5

@joe ¿hay alguna otra manera eficiente de hacer esto? Tengo una mesa con 30,000 registros y me está tomando 20 segundos ... – yogi

13
SELECT [ReportId], 
     SUBSTRING(d.EmailList,1, LEN(d.EmailList) - 1) EmailList 
FROM 
     (
      SELECT DISTINCT [ReportId] 
      FROM Table1 
     ) a 
     CROSS APPLY 
     (
      SELECT [Email] + ', ' 
      FROM Table1 AS B 
      WHERE A.[ReportId] = B.[ReportId] 
      FOR XML PATH('') 
     ) D (EmailList) 

SQLFiddle Demo

Cuestiones relacionadas