IT/SQL
MSSQL STRING_AGG
아이앤휘
2024. 5. 5. 09:59
MSSQL 에서 특정 컬럼의, 여러 로우의 값들을 , 한 컬럼으로 읽어들이는 함수입니다.
STUFF + FOR XML PATH 의 대용이라고 생각하면 되는데, 사용하기 편하고 성능도 나은것 같습니다.
STRING_AGG 구문
STRING_AGG ( expression, separator ) [ <order_clause> ]
<order_clause> ::=
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
STRING_AGG 예제
예제를 위한 데이터 생성
CREATE TABLE SAMPLE1 (
CLS_NM VARCHAR(10)
,NM_KR VARCHAR(10)
)
INSERT INTO SAMPLE1 VALUES ( '병아리', '김은총')
INSERT INTO SAMPLE1 VALUES ( '병아리', '이민준')
INSERT INTO SAMPLE1 VALUES ( '병아리', '김현주')
INSERT INTO SAMPLE1 VALUES ( '토끼', '최동현')
INSERT INTO SAMPLE1 VALUES ( '토끼', '박민재')
INSERT INTO SAMPLE1 VALUES ( '토끼', '지서연')
데이터 생성 결과는 아래와 같습니다.
반과 학생 이름을 나열했습니다.

이제 STRING_AGG 를 이용해서 각 반별로 학생 이름을 가로로 배치해보겠습니다.
SELECT CLS_NM, STRING_AGG(NM_KR, ',') AS NMS
FROM SAMPLE1
GROUP BY CLS_NM
결과는 아래와 같습니다.
