[Oracle] 여러개의 Row 값을 하나의 Column에 담기

동민·2022년 6월 10일
고객번호	|	값
----------------
	1	|	A
	1	| 	A
	1	|	B
	2	|	C
	2	|	C
    2	|	D

만약, 위와 같은 결과를 아래와 같이 변환하고자 하는 니즈가 있다면,

고객번호	|	결과
----------------
	1	|	A, A, B
	2	|	C, C, D
SELECT 고객번호, LISTAGG(, ',') WITHIN GROUP (ORDER BY) AS 결과
  FROM 테이블
 WHERE 1=1
   AND 고객번호 IN (1, 2)
 GROUP BY 고객번호

중복을 제거하려면,

고객번호	|	결과
----------------
	1	|	A, B
	2	|	C, D
SELECT 고객번호, REGEXP_REPLACE(LISTAGG(, ',') WITHIN GROUP (ORDER BY), '([^,]+)(,\1)*(,|$)', '\1\3')  AS 결과
  FROM 테이블
 WHERE 1=1 
   AND 고객번호 IN (1, 2)
 GROUP BY 고객번호
profile
BE Developer

0개의 댓글