반응형
* WM_CONCAT, LISTAGG, 문자열 연결, 컬럼 붙이기, 컬럼연결, 여러행합치기
* 10g~11g R1에서는 WM_CONCAT, 11g R2 이상부터는 LISTAGG 사용
(버전모르겠으면 그냥 다해보고 되는거 하면됩니다)
* 모두 GROUP 함수이기 때문에 GROUP BY는 생략.
1. WM_CONCAT ( 10g ~ 11g R1 )
-- 문자열/컬럼내용 붙이기
SELECT WM_CONCAT(컬럼명)
FROM 테이블명
> ROW1,ROW2,ROW3,ROW4,ROW4
-- 중복 제거하자
SELECT WM_CONCAT(DISTINCT 컬럼명)
FROM 테이블명
> ROW1,ROW2,ROW3,ROW4
-- 예쁘게 정리하자
SELECT REPLACE(WM_CONCAT(DISTINCT 컬럼명), ',', ', ')
FROM 테이블명
> ROW1, ROW2, ROW3, ROW4
반응형
2. LISTAGG ( 11g R2~ )
-- LISTAGG 기본
SELECT LISTAGG(컬럼명, ',') -- 단순 LISTAGG
FROM 테이블명
-- 응용
SELECT 다른컬럼1,
LISTAGG(컬럼명, ',')
WITHIN GROUP (ORDER BY 정렬컬럼) -- 정렬
OVER(PARTITION BY 다른컬럼1) -- 다른컬럼과 같이 쓸때, 정렬 필수
FROM 테이블명
* GROUP BY 컬럼에 NULL이 있으면 에러 납니다.
* LISTAGG도 길어지면 문제 생긴다. 4000자 초과 시 옵션을 주는 방법이 있습니다.
1) LISTAGG 결과 4000자 초과 에러 발생 시 아래 링크 참고 (12c 이상)
2021.08.20 - [Oracle] - [ORACLE] LISTAGG 4000자 초과/길이 초과 ON OVERFLOW 절
그리드형
'IT > DB' 카테고리의 다른 글
[ORACLE] 오라클 ROUND, TRUNC (소수점 반올림, 버림) (0) | 2021.09.10 |
---|---|
[ORACLE] 오라클 ORA-01489 에러 LISTAGG 길이 초과 시 해결 방법 (0) | 2021.08.20 |
[ORACLE] 자주보는 오라클 에러 모음 / ORA-에러코드 모음 (0) | 2021.08.20 |
[ORACLE] 오라클 테이블 컬럼 순서 변경 (0) | 2021.08.20 |
[ORACLE] 오라클 DDL ALTER 문(컬럼명/타입 변경,코멘트 추가,디폴트 추가,CLOB 변경) (0) | 2021.08.20 |
댓글