如何执行将组合字符串的 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
我有一个 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