반응형
- 오라클에서 여러 행의 컬럼 값을 하나로 합쳐주는 기능을 지원하는 함수는 버전별로 상이하다.
- XMLAGG : 오라클 9i 이하
- WM_CONCAT : 오라클 10g ~ 11g R1
- LISTAGG : 오라클 11g R2 ~ ( DISTINCT 를 사용한 중복제거 불가 / 정규식 함수 사용 )
- LISTAGG : 오라클 19g ~ ( DISTINCT 를 사용한 중복제거 가능 )
- LISTAGG( ) 함수는 그룹 함수이기 때문에 GROUP BY 또는 PARTITION BY 절과 함께 사용해야 한다.
구문 예시
LISTAGG([합칠 컬럼명], [구분자]) WITHIN GROUP(ORDER BY [정렬 컬럼명])
PARTITION BY 절을 사용하여 컬럼 합치기
SELECT ename
, job
, LISTAGG(ename, ',') WITHIN GROUP(ORDER BY ename) OVER(PARTITION BY job) AS names
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
중복을 제거하여 컬럼 합치기
REGEXP_REPLACE 정규식 함수를 사용하여 컬럼의 중복을 제거하는 방법이며, 값의 순서로 정렬되어 있어야 정확한 중복제거가 된다.
SELECT job
, REGEXP_REPLACE(LISTAGG(deptno, ',') WITHIN GROUP(ORDER BY deptno), '([^,]+)(,\1)*(,|$)', '\1\3') deptnos
-- , LISTAGG(DISTINCT deptno, ',') WITHIN GROUP(ORDER BY deptno) -- Oarcle 19g 이상
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN', 'CLERK')
GROUP BY job
Tmax Tibero의 경우에는 AGGR_CONCAT 함수를 사용하면 되는데, 설명은 아래 블로그를 참고하면 된다.
[Tibero] AGGR_CONCAT 함수 (여러 행을 하나의 값으로 합치기)
AGGR_CONCAT 함수AGGR_CONCAT는 그룹 내의 모든 로우에 대해 문자열과 구분자를 접합하여 하나의 문자열로 만들어 반환하는 함수이다. NULL 값을 반환하는 파라미터는 결과로부터 제외된다. AGGR_CONCAT의
sloth91.tistory.com
[ 참고 ]
반응형
'Develops > SQL' 카테고리의 다른 글
[ORACLE] SIGN 함수 (양수,음수 구분하기) (0) | 2024.03.26 |
---|---|
[ORACLE] GREATEST, LEAST 함수 (하나의 행에서 최대값, 최소값 구하기) (0) | 2024.03.26 |
[ORACLE] LPAD, RPAD 함수 (지정한 길이만큼 문자('0', 공백) 채우기) (0) | 2024.03.24 |
[ORACLE] 서브쿼리 2 DEPTH 참조 (SubQuery 2 Depth Issue) (0) | 2024.03.24 |
[ORACLE] 전역 임시 테이블 (Global Temporary Table) (0) | 2024.03.09 |