2011-07-14 11 views
5

Tengo una tabla de productos como a continuación. Me gustaría crear un sql que me dé el nombre del producto separado por punto y coma.Crear sql que me dará el nombre del producto separado por punto y coma?

ProductName AccountExpert 
-------------------------- 
Tea   JohnSmith 
Banana  GarySulvan 
Water  JohnSmith 
Candy  BobbySimmons 
ConfecItem BobbySimmons 
Bread  JohnSmith 
Soda   JohnSmith 

salida de SQL gustaría este

AccountExpert Products 
----------------------- 
JohnSmith  Tea; Water; Bread; Soda 
GarySulvan  Banana 
BobbySimmons Candy; ConfecItem 
+1

¿Qué motor SQL está utilizando? (Esto es importante porque la agregación de concatenación es realmente bastante complicada y la respuesta puede depender del motor y la versión que tenga). –

+0

debe investigar un poco más y esforzarse un poco antes de publicar su pregunta aquí. ¡Este no es un sitio web de preguntas y respuestas, es donde la gente lo ayudará si ha hecho un esfuerzo y está atrapado en algún lugar! –

+2

@Tarun mostrando un poco de esfuerzo es un gesto agradable, claro, pero ... es * no * un sitio web de preguntas y respuestas ?! ¡Por supuesto que es! –

Respuesta

1

con MS SQL puede utilizar FOR XML, utilizando la función Stuff para eliminar el exceso de delimitador. Desafortunadamente, no hay una función de grupo concat con MySQL.

CREATE TABLE #ProductExpert (ProductName nvarchar(20), AccountExpert nvarchar(20)) 

INSERT INTO #ProductExpert(ProductName, AccountExpert) SELECT 
'Tea',   'JohnSmith'  UNION ALL SELECT 
'Banana',  'GarySulvan' UNION ALL SELECT 
'Water',  'JohnSmith'  UNION ALL SELECT 
'Candy',  'BobbySimmons' UNION ALL SELECT 
'ConfecItem', 'BobbySimmons' UNION ALL SELECT 
'Bread',  'JohnSmith'  UNION ALL SELECT 
'Soda',   'JohnSmith' 

SELECT DISTINCT 
    ae.AccountExpert, 
    Stuff((
     SELECT 
      '; ' + p.ProductName 
     FROM 
      #ProductExpert AS p 
     WHERE 
      ae.AccountExpert = p.AccountExpert 
     ORDER BY 
      p.ProductName 
     FOR XML PATH('') 
    ), 1, 2, '') AS Products 
FROM 
    #ProductExpert AS ae 
ORDER BY 
    ae.AccountExpert 

DROP TABLE #ProductExpert 
+0

Muchas gracias por el sql. Funcionó en el primer intento. –

1

si estás usando MySQL a continuación, utilizar la agrupación y GROUP_CONCAT:

SELECT AccountExpert, GROUP_CONCAT(ProductName SEPARATOR '; ') 
FROM ProductExperts 
GROUP BY AccountExpert 
+0

oh acaba de darse cuenta de que etiquetó la pregunta como sql-server-2008, google rápido devolvió esta publicación: http://blog.shlomoid.com/ 2008/11/emulating-mysqls-groupconcat-function.html espero que ayude – keymone

Cuestiones relacionadas