如何进行将字符串组合在一起的SQL查询

时间:2018-08-09 22:02:59

标签: sql sql-server string-aggregation

我有一个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   |
--------------------------------------------

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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