【问题标题】:Help writing SQL query [duplicate]帮助编写 SQL 查询 [重复]
【发布时间】:2010-09-06 17:34:27
【问题描述】:

可能重复:
Need help with a SQL query that combines adjacent rows into a single row

这就是我的桌子的样子。

..我需要编写一个查询来获得这样的输出:

这不是作业题。

【问题讨论】:

标签: sql sql-server tsql pivot


【解决方案1】:

以下答案仅对 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

【讨论】:

    【解决方案2】:

    一些用于测试的样本数据:

    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
    

    【讨论】:

      【解决方案3】:

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

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

      应该没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2012-07-06
        • 2019-10-11
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        相关资源
        最近更新 更多