MSSQL STRING_AGG 문자열 합치기

개요

MSSQL STRING_AGG 는 여러 행의 데이터를 한 컬럼으로 합치는 기능이고, 그 외에 CONCAT 으로 A + B + C 이런식으로 합치는 방법이 있는데, 여기서는 STRING_AGG 을 다룹니다. STRING_AGG 는 MSSQL 2017 버전에서 새로 생긴 기능이라서 그 이전 버전은 STUFF … FOR XML PATH… 구문을 이용해야 합니다.
CONCAT 은 MSSQL Concat 함수 참조

구문

STRING_AGG ( expression, separator ) [ <order_clause> ]

<order_clause> ::=   
    WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )

MSSQL STRING_AGG 기본 예제

예제 데이터

MSSQL STRING_AGG 기본예제 결과
-- 정렬 없음
SELECT CLS_NM, STRING_AGG(NM_KR,'-')
FROM SAMPLE1
GROUP BY CLS_NM

-- 이름순 정렬
SELECT CLS_NM, STRING_AGG(NM_KR,'-') WITHIN GROUP ( ORDER BY NM_KR )
FROM SAMPLE1
GROUP BY CLS_NM
MSSQL 문자열 합치기 예제 결과

DISTINCT 포함 ( 서브쿼리에서 DISTINCT )

DISTINCT 가 필요할 경우, STRING_AGG 만을 이용해서는 별다른 해결책이 없음. 서브쿼리에서 DISTINCT 를 한 번 하고, 바깥에서 STRING_AGG 를 적용하는 방법이 현재까지 찾은 최선임

SELECT CLS_NM, STRING_AGG(NM_KR,'-')
FROM (
	SELECT DISTINCT CLS_NM, NM_KR
	FROM SAMPLE1
	) A
GROUP BY CLS_NM

MSSQL 문자열함수 26개 정리 바로가기
STRING_AGG MS 문서 링크

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다