STRING AGG 함수를 사용해 여러 개 ROW를 쉼표로 구분된 하나의 값으로 만드는 방법을 소개하고자 합니다. 단, MSSQL 2017 이상 버전만 해당 함수를 활용가능합니다. STRING AGG가 안될 경우, MSSQL에서 처리하는 방법에 대해서는 아래 글에서 소개하였습니다.
[MSSQL] 한 그룹 내 여러 행을 하나의 값으로 합치기 - ROW_NUMBER, JOIN, CONCAT 활용하기 |
MS SQL에서 해당 함수를 소개한 문서를 보면, 특정 기사에 삽입된 태그들을 뉴스 제목과 함께 정렬한다든지, 한 그룹의 이메일 수신인을 한 번에 보낼 수 있게 묶어준다든지 실제 회사에서 운영 업무 시 활용해볼 수 있는 예시들이 많이 기재되어 있습니다. 그만큼 활용도가 높은 함수로 보입니다. 준비한 예시 데이터는 다음과 같습니다
City | State_Name |
Phoenix | AZ |
Tucson | AZ |
Mesa | AZ |
Denver | CO |
Colorado Springs | CO |
Aurora | CO |
Fort Collins | CO |
WITH #TABLE AS
(
SELECT 'Phoenix' City, 'AZ' State_Name UNION ALL
SELECT 'Tucson' City, 'AZ' State_Name UNION ALL
SELECT 'Mesa' City, 'AZ' State_Name UNION ALL
SELECT 'Denver' City, 'CO' State_Name UNION ALL
SELECT 'Colorado Springs' City, 'CO' State_Name UNION ALL
SELECT 'Aurora' City, 'CO' State_Name UNION ALL
SELECT 'Fort Collins' City, 'CO' State_Name
)
SELECT *
FROM #TABLE
STRING AGG 함수사용하기
STRING_AGG ( expression, separator ) WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] ) |
📌 하나의 컬럼에 합치기 (e.g. city 이름 전체를 하나의 컬럼에 나열한다)
SELECT STRING_AGG(CITY, ', ') Cities
FROM #TABLE
Cities |
Phoenix, Tucson, Mesa, Denver, Colorado Springs, Aurora, Fort Collins |
📌 GROUP으로 묶기 ( e.g. State를 기준으로 도시 이름을 합친다)
-- 함수 안에 (1)합치고자 하는 컬럼(CITY) (2) 구분할 수 있는 표현(,)를 넣어준다
SELECT STATE_NAME , STRING_AGG(CITY, ',') Cities
FROM #TABLE
GROUP BY STATE_NAME
Cities | State_Name |
Phoenix, Tucson, Mesa | AZ |
Denver, Colorado Springs, Aurora, Fort Collins | CO |
📌 GROUP 내에서 특정 순서대로 정렬해서 묶는다 ( e.g. State 내에 도시 알파벳 순으로 이름을 합친다)
-- 함수 안에 (1)합치고자 하는 컬럼(CITY) (2) 구분할 수 있는 표현(,)를 넣어준다
SELECT STATE_NAME, STRING_AGG(CITY, ',') WITHIN GROUP (ORDER BY CITY DESC) Cities
FROM #TABLE
GROUP BY STATE_NAME
Cities | State_Name |
Tucson, Phoenix, Mesa | AZ |
Fort Collins, Denver, Colorado Springs, Aurora | CO |
'데이터로 생각하기' 카테고리의 다른 글
[MSSQL] 한 그룹 내 여러 행 하나로 합치기 - ROW_NUMBER, JOIN, CONCAT 활용하기 (0) | 2023.01.28 |
---|---|
[MSSQL] WHILE을 이용한 LOOP 생성 - 구간별 데이터 한번에 추출하는 반복문 만들기 (0) | 2022.12.19 |