DB/Oracle

여러 행의 데이터를 하나의 컬럼데이터로 표현(LISTAGG,XMLAGG)

밍꿔 2020. 1. 29. 14:47


반응형

 

 

1)  문자열 조합 데이터 SIZE가 4000바이트 이하 일때

SELECT
   mtagWord.ID
   ,(
     SELECT LISTAGG(S1.SYNONYM_WORD, ',')
            WITHIN GROUP (ORDER BY S1.SYNONYM_WORD) 
     FROM DS_MTAG_SYNONYM S1 
     WHERE S1.MTAG_WORD_ID = mtagWord.MTAG_WORD_ID
    ) AS SYNONYM_WORD
FROM TEST mtagWord

 

 

2)  문자열 조합 데이터 SIZE가 4000바이트 이상 일때 (XML형태로 파싱 후 재작업)

SELECT
    mtagWord.ID
    ,(
        SELECT
            RTRIM(XMLAGG(XMLELEMENT(S1,S1.SYNONYM_WORD||',') ORDER BY S1.SYNONYM_WORD).EXTRACT('//text()').GETCLOBVAL(),',')
        FROM DS_MTAG_SYNONYM S1
        WHERE S1.MTAG_WORD_ID = mtagWord.MTAG_WORD_ID
    ) AS SYNONYM_WORD
FROM TEST mtagWord

 

 

 

반응형