AGE        NAME
----------------
10             A
10             B
10             C
11             D
11             E



테이블 구조가  위와 같은데 가져오려는 결과가

10          A,B,C
11          D,E



가 나오게 하려고 한다.

 SELECT AGE, CAST(XML2CLOB(XMLAGG(XMLELEMENT(NAME "NM", strip(NAME)))) AS VARCHAR(3000))
    FROM TABLE
  GROUP BY AGE 


10           <NM>A</NM><NM>B</NM><NM>C</NM>
11           <NM>D</NM><NM>E</NM> 

 


 SELECT AGE,
    REPLACE(REPLACE(REPLACE( 
    CAST(XML2CLOB(XMLAGG(XMLELEMENT(NAME "NM", strip(NAME)))) AS VARCHAR(3000))
   , '</NM><NM>', ',') , '<NM>', '')  , '</NM>', '') 
    FROM TABLE
  GROUP BY AGE 


10           A,B,C
11           D,E 


 
listagg를 지원하는 DB2  를 사용중이라면

SELECT AGE, LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY NAME)
   FROM TABLE 
 GROUP BY AGE 


로 간단히 할수도 있다
 
Posted by orange code

티스토리 툴바