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

如何执行将组合字符串的SQL查询,sql,sql-server,string-aggregation,Sql,Sql Server,String Aggregation,我有一个MSSQL数据库表,其中包含以下数据: ---------------------------------------- | Id | PartNo | Price | Qty| ExtPrice | ---------------------------------------- | 1 | Thing1 | 1.50 | 2 | 3.00 | ---------------------------------------- | 2 | Thing 2 | 2.50

我有一个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   |
--------------------------------------------
您可以使用聚合函数

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;
见:

顺便说一句:没有更多的列留给分组依据,因此,您可以直接删除分组依据。

您可以使用聚合函数

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;
见:


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

如果您使用的是比SQL Server 2017更早的任何版本,
STRING\u 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

如果您使用的是比SQL Server 2017更早的任何版本,
STRING\u 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