오늘은 업무를 진행하면서 데이터 추출요청으로 특정기간 고객별 상위 매출 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
'프로그래밍 > ORACLE' 카테고리의 다른 글
[ORACLE] Null 속성 이해 (0) | 2024.09.21 |
---|---|
[ORACLE] 반복문(CURSOR, FOR LOOP) 사용법 (0) | 2022.01.02 |
[ORACLE] 테이블정의서 추출 쿼리 (0) | 2019.04.16 |
[ORACLE] 조인으로 삭제하기 (0) | 2019.04.04 |