mssql вывести столбец в одну строку
Microsoft SQL Server 2012 Нужно вывести значения столбца в строки через запятую с группировкой по значению в другом столбце.
Ответы (3 шт):
Автор решения: S.H.
→ Ссылка
Со STRING_AGG вроде всё просто:
SELECT Id, Name FROM Table_1
Id Name
1 А
2 А
3 Б
4 Б
Тогда
SELECT Name, STRING_AGG(Id,', ') AS Result FROM Table_1 GROUP BY Name
даёт нам
Name Result
А 1, 2
Б 3, 4
Насчет FOR XML PATH('') - мучаюсь уже минут 20, готов уже сдаться
Автор решения: Akina
→ Ссылка
CREATE TABLE test (id CHAR(1), val INT); INSERT INTO test VALUES ('A', 1), ('A', 2), ('B', 3), ('B', 4); SELECT * FROM test; GOid | val :- | --: A | 1 A | 2 B | 3 B | 4
SELECT id, STUFF((SELECT ',' + CAST(val AS VARCHAR) FROM test t2 WHERE t1.id = t2.id FOR XML PATH('')),1,1,'') vals FROM test t1 GROUP BY id; GOid | vals :- | :--- A | 1,2 B | 3,4
db<>fiddle here
Автор решения: Serhiii
→ Ссылка
declare @test TABLE (id VARCHAR(1), val INT);
INSERT INTO @test VALUES ('A', 1), ('A', 2), ('B', 3), ('B', 4);
SELECT * FROM @test;
SELECT id, LEFT(vals, LEN(vals)-1) AS txts
FROM (select id, CONVERT(varCHAR(max),val) as val from @test) t1
CROSS APPLY (SELECT val+', '
FROM (select id, CONVERT(varCHAR(max),val) as val
from @test) t2
WHERE t1.id = t2.id
FOR XML PATH('')
) pre_trimmed (vals)
GROUP BY id, vals
