2010-09-06 136 views
1

可能重复:
Need help with a SQL query that combines adjacent rows into a single row帮助编写SQL查询

所以这是我的桌子的样子。

alt text

..和我需要编写一个查询得到的输出是这样的:

alt text

这不是一门功课的问题。

+2

家庭作业与否,仍然是[这一个](http://stackoverflow.com/questions/3476186)或[那一个](http://stackoverflow.com/questions/3476186)和[很多更多](http://stackoverflow.com/search?q=concat%2Brows%2BCSV+%5Bsql-server%5D) – gbn 2010-09-06 17:41:33

回答

3

以下的答案必须是唯一有效的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

一些样本数据与测试:

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 

和查询将是:

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

这个问题被问了很多次... 答案总是一样的。类似于

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

应该没问题。