У меня есть таблица базы данных MSSQL с такими данными, как:
----------------------------------------
| Id | PartNo | Price | Qty| ExtPrice |
----------------------------------------
| 1 | Thing1 | 1.50 | 2 | 3.00 |
----------------------------------------
| 2 | Thing 2 | 2.50 | 3 | 7.50 |
----------------------------------------
В последних трех полях я могу выполнить SUM () с моей GROUP BY, но мне нужно, чтобы это было объединено с полем 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