如何执行将组合字符串的SQL查询
我有一个MSSQL数据库表,其中包含以下数据:如何执行将组合字符串的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
----------------------------------------
| 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