코딩공부/DataBase

oracle 데이터 합치기

integerJI 2020. 7. 18. 13:10

https://gent.tistory.com/15

 

[Oracle|오라클] 여러 행(ROW)을 하나의 컬럼(COLUMN)으로 합치기 (WM_CONCAT)

WM_CONCAT 함수를 이용하여 손쉽게 여러행의 데이터를 한 컬럼으로 합칠 수 있다. □ 방법 1. (WM_CONCAT 이용) --가상 테이블 WITH TEST_TABLE AS ( SELECT '고구려' COUNTRY, '1대' ST, '동명성왕' KING_NM FROM..

gent.tistory.com

일하면서 중복된 데이터를 하나로 묶어 컬럼으로 나타내 주고 싶었습니다..

 

현재 테이블 상황

select PRO_TITLE,PRO_BODY from system.TB_PROJECT order by PRO_ID

 

 

테이블 상황은 이렇게 되어있으며

 

여기서 중복된 PRO_TITLE의 값은 하나로 통일하며

 

PRO_BODT의 값을 한 row 컬럼으로 나타내 줄겁니다.

 

1. WM_CONCAT 함수 사용하기

 

select
    PRO_TITLE,
    WM_CONCAT(PRO_BODY) as PRO_BODY
from
    system.TB_PROJECT
group by PRO_TITLE

 

 

PRO_TITLE는 단일 그룹의 그룹 함수가  아니므로 group by로 PRO_TITLE를 묶어주어야 합니다.

 

쿼리문을 실행하면 WM_CONCAT 함수로 PRO_TITLE가 같은것들의 PRO_BODY로 합쳐줍니다.

 

2. XMLAGG, XMLELEMENT 사용

select
    PRO_TITLE,
    --WM_CONCAT(PRO_BODY) as PRO_BODY
    SUBSTR(XMLAGG(xmlelement (PRO_TITLE, ',', PRO_BODY) order by PRO_ID).extract('//text()').GETSTRINGVAL(), 2) PRO_BODY
from
    system.TB_PROJECT
group by
    PRO_TITLE

 

 

,를 기준으로 PRO_TITLE의 PRO_BODY를 합쳐주고 정렬을 해줍니다.

 

물론 , 말고 사용자가 원하는 형식으로 표현해 줄 수 있습니다.