Агрегация строк в SQL Server
Пару способов я знаю, через FOR XML PATH и STRING_AGG (only in SQL SERVER 2017), но тем не менее кое что новое открыл:
https://habr.com/ru/post/52504/
Создаем таблицу
CREATE TABLE Items(GroupId INT, Item NVARCHAR(10)) INSERT INTO Items(GroupId, Item) SELECT 1 AS GroupId, 'AAA' AS Item UNION ALL SELECT 2, 'IS' UNION ALL SELECT 5, 'OMG' UNION ALL SELECT 2, 'WHAT' UNION ALL SELECT 2, 'THE' UNION ALL SELECT 1, 'This'
вот такого вида
Получить надо примерно такое:
Понравился трюк за номером 2:
Есть более красивый способ, не использующий временных таблиц. Он основан на трюке
SELECT var= var + ',' + col FROM smwhere
Да, так можно и это работает:
CREATE FUNCTION ConcatItems(@GroupId INT) RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @ItemList varchar(8000)
SET @ItemList = ''
SELECT @ItemList = @ItemList + ',' + Item
FROM Items WHERE GroupId = @GroupId
RETURN
SUBSTRING(@ItemList, 2, 100)
END
GO
SELECT GroupId, dbo.ConcatItems(GroupId) ItemList
FROM Items
GROUP BY GroupId