如何执行将组合字符串的 SQL 查询

How to do a SQL Query that will combine strings

我有一个 MSSQL 数据库 table,其中的数据如下:

----------------------------------------
| 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   |
--------------------------------------------

您可以使用 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。

如果您使用的版本早于 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