【问题标题】:How to do a SQL Query that will combine strings如何执行将组合字符串的 SQL 查询
【发布时间】:2018-08-09 22:02:59
【问题描述】:

我有一个 MSSQL 数据库表,其中包含如下数据:

----------------------------------------
| Id | PartNo | Price  | Qty| ExtPrice |
----------------------------------------
| 1  | Thing1  | 1.50  |  2 |  3.00    |
----------------------------------------
| 2  | Thing 2 | 2.50  |  3 | 7.50     |
----------------------------------------

最后三个字段我可以用我的 GROUP BY 做一个 SUM(),但我需要它来组合 PartNo 字段,如下所示:

--------------------------------------------
| PartNo          | Price | Qty | ExtPrice |
--------------------------------------------
| Thing1, Thing2  | 4.00  |  5  |  10.50   |
--------------------------------------------

【问题讨论】:

    标签: sql sql-server string-aggregation


    【解决方案1】:

    如果您使用的任何版本早于 SQL Server 2017,STRING_AGG() 将无法供您使用,对于旧版本,您可以使用 FOR XML PATH('') 方法连接字符串,如下所示...

    SELECT STUFF((  SELECT ',' + PartNo
                    FROM TableName 
                    FOR XML PATH(''), TYPE)
                    .value('.', 'NVARCHAR(MAX)') ,1 ,1,'') AS PartNo
          , SUM(Price)      AS Price
          , SUM(Qty)        AS Qty
          , SUM(ExtPrice)   AS ExtPrice
    FROM TableName
    

    【讨论】:

      【解决方案2】:

      您可以使用STRING_AGG (Transact-SQL) 聚合函数。

      SELECT 
          STRING_AGG (PartNo, ', ') WITHIN GROUP (ORDER BY PartNo ASC) AS PartNo,
          SUM(Price) As Price, 
          SUM(Qty) As Qty, 
          SUM(ExtPrice) As ExtPrice
      FROM MyTable;
      

      见:http://sqlfiddle.com/#!18/77ff1/2/0

      顺便说一句:没有更多的列可供分组,因此,您可以删除 GROUP BY。

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 2017-03-29
        • 2019-11-15
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多