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