본문 바로가기
IT/기타

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

by twofootdog 2021. 5. 28.

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

댓글