컴퓨터 프로그래밍
[DB2] 여러행의 문자열을 합쳐서 가져오기 (aggregation)
orange code
2012. 1. 13. 14:52
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
로 간단히 할수도 있다