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;
GO
id | 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;
GO
id | 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
→ Ссылка