IT/기타

Oracle SQL LISTAGG 함수로 행(row) 합치기

twofootdog 2021. 5. 28. 16:20

Oracle SQL을 작성하다 보면 특정 컬럼의 데이터 row를 1개의 문자열로 합쳐야 하는 경우가 존재한다.

그럴 경우 아래와 같이 ORACLE LISTAGG 함수를 이용해서 행을 합칠 수 있다.

 

만약 10, 20, 30 데이터 row로 이루어진 테이블이 있다고 가정하자(이 글에서는 테이블 대신 WITH 절을 사용할 것이다)

 

WITH TAB AS (
SELECT '10' COL FROM DUAL
UNION ALL
SELECT '20' COL FROM DUAL
UNION ALL
SELECT '30' COL FROM DUAL)
SELECT * FROM TAB;

 

3개의 ROW를 1개의 STRING으로 묶고 각 데이터 값을 ","로 구분하기 위해서는 아래와 같이 LISTAGG 함수를 사용해서 SQL을 작성하면 된다.

SQL : 

WITH TAB AS (
SELECT '10' COL FROM DUAL
UNION ALL
SELECT '20' COL FROM DUAL
UNION ALL
SELECT '30' COL FROM DUAL)
SELECT LISTAGG(COL, ',') WITHIN GROUP (ORDER BY COL) FROM TAB;

 

결과 : 

 


참고자료

https://modern-sql.com/feature/listagg

 

SQL LISTAGG concatenates values of multiple rows into an delimited string such as CSV.

LISTAGG is the new SQL standard version of GROUP_CONCAT or STRING_AGG. LISTAGG supports DISTINCT and provides an ON OVERFLOW clause to control the behavior when exceeding the maximum string length.

modern-sql.com