Database/SQL

[Oracle] LISTAGG WITHIN GROUP 문

헹창 2019. 7. 29.
반응형

LISTAGG 구문

SELECT LISTAGG (컬럼명, 구분기호) WITHIN GROUP (ORDER BY 정렬기준컬럼)
FROM 테이블명

 

예제

다음 테이블로 사용방법을 살펴보자

 

동일한 MSD_ID의 값의 LINK_ORG 값을 하나의 컬럼으로 가져오고 싶다면 LISTAGG 구문을 사용해서 가져오면 된다.

SELECT LISTAGG(LINK_ORG, '') WITHIN GROUP (ORDER BY LINK_ORG) AS LINK_ORG
  FROM G_LINK
 WHERE MSD_ID = 'MSD_ID'

 

 

여기서 구분기호를 두지 않았지만 만약 구분기호를 ',' 로 두었다면 결과값은 00,01,02,03,04 가 나온다.

 

참고로 LISTAGG는 중복제외(DISTINCT)를 지원하지 않는다.

 

이를 해결하기 위해 아래와 같이 서브쿼리를 이용하여 중복을 제외한 테이블에서 LISTAGG를 사용한다.

 

SELECT LISTAGG(LINK_ORG, ',') WITHIN GROUP (ORDER BY LINK_ORG) AS LINK_ORG
  FROM (SELECT DISTINCT LINK_ORG FROM G_LINK MSD_ID='값')

 

 

참고 사이트

Link : https://aljjabaegi.tistory.com/144

 

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

ORACLE LISTAGG 여러 행을 하나의 컬럼으로 가져오기 11g 에서 추가. 10g 이하는 WM_CONCAT 함수 사용 (WM_CONCAT은 페이지 하단 Link 참고) 오라클에서 여러개의 열로 된 값을 한 행의 값으로 가져와야 할 때 LIS..

aljjabaegi.tistory.com

 

728x90
반응형

댓글

추천 글