2012-05-07 4 views
3

J'ai une table avec les données suivantes:SQL SELECT - regrouper plusieurs valeurs sur une seule ligne

ID CAT TYPE SUBPRODUCT 
--- ---- ------ ---------------- 
1 1  1  AA 
2 1  1  BB 
3 1  2  CC 

J'aimerais obtenir les données comme ceci:

CAT TYPE SUBPRODUCT 
----- ------ --------------- 
1  1  AA,BB 
1  2  CC 

pls me répondre que devrais-je faire.

Merci.

+0

car il semble que vous avez obtenu le vous avez besoin, vous aiderais s'il vous plaît accepter la réponse. :) –

Répondre

7

Vous pouvez utiliser FOR XML PATH. Bien qu'un peu difficile à lire, il est actuellement le moyen le plus concis de concaténer les chaînes.

Répartition

  • FOR XML PATH concatène toutes les valeurs qui correspondent à la sous-sélection
  • STUFF supprime la principale virgule

Déclaration SQL

SELECT q.CAT 
     , q.TYPE 
     , SUBPRODUCT = STUFF((SELECT ', ' + qi.SUBPRODUCT FROM q qi WHERE qi.Cat = q.Cat AND qi.Type = q.Type FOR XML PATH('')), 1, 2, '') 
FROM q 
GROUP BY 
     q.CAT 
     , q.TYPE 

script Test

;WITH q AS (
    SELECT * FROM (VALUES 
    (1, 1, 1, 'AA') 
    , (2, 1, 1, 'BB') 
    , (3, 1, 2, 'CC') 
) AS a (ID, CAT, TYPE, SUBPRODUCT)  
) 
SELECT q.CAT 
     , q.TYPE 
     , SUBPRODUCT = STUFF((SELECT ', ' + qi.SUBPRODUCT FROM q qi WHERE qi.Cat = q.Cat AND qi.Type = q.Type FOR XML PATH('')), 1, 2, '') 
FROM q 
GROUP BY 
     q.CAT 
     , q.TYPE 
+0

Son travail ven. Je remercie vraiment pour votre réponse. :) –

Questions connexes