본문 바로가기
SQL

ORACLE_여러 행을 한 행으로 조회하기

by haheaven 2022. 8. 5.

 

 

1. WM_CONCAT 

* 중복제거 가능(DISTINCT 사용) , 10~11g 

SELECT WM_CONCAT(DISTINCT 컬럼명)
  FROM 테이블명 ;

 

 

 

 

 

2. LISTAGG

* 4000byte 초과시 에러, 11g

SELECT LISTAGG('컬럼명', ',') WITHIN GROUP (ORDER BY '정렬할 컬럼') 
  FROM '테이블명' ;

* LISTAGG는 DISTINCT 사용이 불가능하기 때문에  정규식을 사용해서 중복을 제거

SELECT 
  REGEXP_REPLACE( LISTAGG('컬럼명', ',') 
  WITHIN GROUP(ORDER BY '정렬할 컬럼').EXTRACT('//text()').'([^,]+)(,\1)*(,|$)', '\1\3') 
  FROM '테이블명'  ;

 

 

 

 

3. XMLAGG

* 4000byte 초과시 사용

SELECT
    XMLAGG(XMLELEMENT('테이블명',  '컬럼명'|| ',') 
    ORDER BY '정렬할 컬럼').EXTRACT('//text()').GETCLOBVAL()
FROM '테이블명' ;

 

 

 

 

* xmlagg 사용해도 에러가 날 경우

  서브쿼리에 listagg 에 담아 크기 줄이고 조회하기.

'SQL' 카테고리의 다른 글

SQL_ DECODE, COALESCE, NULLIF, NVL, NVL2  (0) 2023.10.13
ORACLE_LOCK 개체 확인 및 KILL(해제)  (0) 2022.08.05
SQL_ CASE(조건) 와 NULL(변경)  (0) 2021.08.22
SQL_데이터타입 / DATE  (0) 2021.08.21
SQL_기초2  (0) 2021.08.20

댓글