차근차근/Oracle

[Oracle] LISTAGG()

예쁜꽃이피었으면 2022. 1. 5. 14:55
LISTAGG()

여러행의 데이터를 하나의 행에 가로로 출력하기

SELECT
       LISTAGG(필드명, 구분자)
       WITHIN GROUP ( ORDER BY 정렬기준필드 ASC 또는 DESC)
FROM 테이블


출처: https://dololak.tistory.com/809 [코끼리를 냉장고에 넣는 방법]

LISTAGG : 합칠 필드명과, 합칠 때 사용할 구분자를 지정 
WITHIN GROUP : 합칠때 정렬 기준

 

 

LISTAGG함수 실행 결과에서 중복 제거하기
5번행의 SALESMAN의 경우에는 네 개의 중복된 부서번호가 있습니다. 안타깝게도 LISTAGG DISTINCT를 사용할 수 없기 때문에 다른 방법이 필요합니다.
 
중복 해결은 의외로 간단한데 중복이 제거된 상태의 뷰를 만들고 그 뷰를 가지고 LISTAGG를 사용하는 것 입니다.
SELECT JOB,
       LISTAGG(DEPTNO, ', ')
       WITHIN GROUP ( ORDER BY DEPTNO)
       AS DEPTS
FROM (
         SELECT JOB, DEPTNO
         FROM EMP
         GROUP BY JOB, DEPTNO
     ) A
GROUP BY JOB;
 
서브쿼리에서 이미 DEPTNO의 중복을 제거한 상태에서 LISTAGG를 사용하기 때문에 중복이 제거되었습니다.

출처: https://dololak.tistory.com/809 [코끼리를 냉장고에 넣는 방법]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


[참조]

https://dololak.tistory.com/809

 

[Oracle] 여러행의 데이터를 하나의 행에 가로로 출력하기 LISTAGG 함수 사용법

여러행의 데이터를 하나의 행에 가로로 출력하기 LISTAGG 함수 사용법 여러행의 데이터를 하나의 행에 가로로 출력이 가능합니다. 예를 들어 아래 사원 테이블을 보죠. SELECT EMPNO, ENAME, JOB, DEPTNO

dololak.tistory.com

 

 

 

 

 

반응형