DB/Oracle

[Oracle]LISTAGG 여러 행을 하나의 컬럼으로 가져오기

꾹꾹이 2021. 10. 1.
728x90

 

여러행의 데이터를 하나의 컬럼으로 보여주고 싶을 때 LISTAGG 함수를 사용한다.. 오라클 11g에 추가된 함수라 10g이하는 WM_CONCAT 함수를 사용해야한다.

SELECT LISTAGG(여러행컬럼, 구분자) WITHIN GROUP (ORDER BY 순서컬럼) FROM TABLE_NAME

LISTAGG 인자에 가져올 컬럼과 가져온 컬럼을 구분 할 수 있는 구분자를 넣어주면 된다.


예시


여기서
USER_NAME을 한 컬럼에 출력하자.


LISTAGG(USER_NAME, ',')으로 표현했을 경우
홍길동,김길동,이길동으로 포현되며 마지막 이길동 뒤에 ','표시는 생략된다.

정렬기준컬럼은 1줄로 표현되는 데이터의 표현순서를 정해주는 것이다.
별도의 정렬기준 컬럼이 명시되어 있다면, 해당 컬럼명을 ORDER BY 뒷쪽에 표현하면 됩니다.

위 쿼리를 실행하면


이렇게 순번대로 이름이 하나의 컬럼에 출력된다.

난 서브쿼리로 이 함수를 사용했다.. 이 함수는 응용할 수 있는 방법이 다양한 것 같은데 난 아직 이해가 어렵다..
나중에 필요할 때 더 익혀야겠다.

쿼리는 아래 사이트를 참조했다.



참조: https://too612.tistory.com/496

댓글