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

 

결과는 아래와 같습니다.

 

String_agg 의 결과로 병아리와 토끼반의 학생이름이 옆으로 나열됩니다.
쿼리 결과

 

STRING_AGG 의 MS 메뉴얼 링크

댓글수0