programing

SQL Server에서 여러 행에서 하나의 쉼표로 구분된 값 사용

sourcejob 2023. 4. 9. 21:26
반응형

SQL Server에서 여러 행에서 하나의 쉼표로 구분된 값 사용

SQL Server에서 쉼표로 구분된 값으로 데이터를 반환하는 테이블 값 함수를 만들고 싶습니다.

예: 표:tbl

ID | Value
---+-------
 1 | 100
 1 | 200
 1 | 300     
 1 | 400 

이제 함수를 사용하여 쿼리를 실행할 때Func1(value)

SELECT Func1(Value) 
FROM tbl 
WHERE ID = 1

원하는 출력은 다음과 같습니다.100,200,300,400

테스트 데이터

DECLARE @Table1 TABLE(ID INT, Value INT)
INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400)

쿼리

SELECT  ID
       ,STUFF((SELECT ', ' + CAST(Value AS VARCHAR(10)) [text()]
         FROM @Table1 
         WHERE ID = t.ID
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @Table1 t
GROUP BY ID

결과 세트

╔════╦═════════════════════╗
║ ID ║     List_Output     ║
╠════╬═════════════════════╣
║  1 ║  100, 200, 300, 400 ║
╚════╩═════════════════════╝

SQL Server 2017 이후 버전

SQL Server 2017 이후 버전에서 작업하는 경우 내장된 SQL Server Function STRING_AGG를 사용하여 쉼표로 구분된 목록을 만들 수 있습니다.

DECLARE @Table1 TABLE(ID INT, Value INT);
INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400);


SELECT ID , STRING_AGG([Value], ', ') AS List_Output
FROM @Table1
GROUP BY ID;

결과 세트

╔════╦═════════════════════╗
║ ID ║     List_Output     ║
╠════╬═════════════════════╣
║  1 ║  100, 200, 300, 400 ║
╚════╩═════════════════════╝

언급URL : https://stackoverflow.com/questions/21760969/multiple-rows-to-one-comma-separated-value-in-sql-server

반응형