본문 바로가기

프로그래밍/ORACLE

[ORACLE] LISTAGG 사용하여 여러행을 하나의 컬럼으로 합치기

오늘은 업무를 진행하면서 데이터 추출요청으로 특정기간 고객별 상위 매출 3건의 브랜드를 추출해달라는 요청이 있었습니다. 예전에 MS-SQL를 사용할때  STUFF와 FOR XML PATH를 이용하여 조회했던 기억으로 오라클도 관련 방법을 검색했더니 LISTAGG를 사용하는 방법이 있어서 관련 내용 간단히 작성해봅니다. LISTAGG는 11g부터 사용가능하며 9i는 XMLLOG, 10g는 WM_CONCAT등을 사용하여 처리하여야 합니다.

 

샘플테이블

회원번호 매출일자 브랜드
1 2022-01-01 샤넬
1 2022-01-03 루이비통

결과

회원번호 브랜드
1 샤넬,루이비통

사용방법

 

SELECT LISTAGG(브랜드, ',') WITHIN GROUP (ORDER BY 매출일자) OVER (PARTITION BY 회원번호) AS "브랜드" 
  FROM 샘플테이블

 

중복제거 등 추가 내용은 아래 블로그 참고

- https://gent.tistory.com/328

 

[Oracle] 오라클 LISTAGG 함수 사용법 (중복제거, 정렬, 컬럼 합치기)

오라클에서 여러 행의 컬럼 값을 하나로 합치기 위해서는 XMLAGG(오라클 9i 이하), WM_CONCAT(오라클 10g~11g R1) 함수를 사용하였다. 오라클 11g R2 버전부터 WM_CONCAT 함수를 사용을 할 수 없으며 LISTAGG 함

gent.tistory.com