2010-09-06 16 views
1

Possible en double:
Need help with a SQL query that combines adjacent rows into a single rowécriture requête SQL

Voilà donc comment ma table ressemble.

alt text

..et je besoin d'écrire une requête pour obtenir la sortie comme ceci:

alt text

Ce n'est pas une question de devoirs.

+2

Devoirs ou non, toujours une copie de [celui-ci] (http://stackoverflow.com/questions/3476186) ou [celui-là] (http://stackoverflow.com/questions/3476186) et [beaucoup plus ] (http://stackoverflow.com/search?q=concat%2Brows%2BCSV+%5Bsql-server%5D) – gbn

Répondre

3

La réponse suivante est valable uniquement pour SQL Server 2005+:

SELECT t.category, 
     STUFF((SELECT ','+ x.prod 
        FROM TABLE x 
       WHERE x.category = t.category 
       GROUP BY x.prod 
       FOR XML PATH('')), 1, 1, '') AS prod, 
     SUM(t.price) AS amt 
    FROM TABLE t 
GROUP BY t.category 
0

Certaines données de l'échantillon à tester avec:

DECLARE @Sample TABLE (ID INT, Name VARCHAR(15), Price INT) 

INSERT @Sample 
SELECT 1, 'Ford', 100 UNION ALL 
SELECT 1, 'Cereal', 200 UNION ALL 
SELECT 2, 'Fruits', 30 UNION ALL 
SELECT 2, 'Fruits2',70 UNION ALL 
SELECT 3, 'Soap', 40 

SELECT * FROM @Sample 

Et la requête serait:

SELECT s3.ID, Stf.Conc, 
SUM(s3.Price) PriceSum 
FROM @Sample s3 INNER JOIN (
SELECT DISTINCT s1.ID, 
     STUFF((SELECT ',' + s2.Name 
      FROM @Sample AS s2 
      WHERE s2.ID = s1.ID 
      FOR XML PATH('')), 1, 1, '') Conc 
     FROM @Sample s1) AS Stf 
ON s3.ID = Stf.ID 
GROUP BY s3.ID, Stf.Conc 
0

Cette question est posée plusieurs fois ... La réponse est toujours la même. Quelque chose comme

SELECT Category, GROUP_CONCAT(PROD SEPARATOR ", ") AS Prod, SUM(Price) AS Amt FROM yourtable GROUP BY Category 

devrait être ok.