작성일자 : 2023-10-28
Ver 0.1.1
0. Intro
쿼리 작성시 특정 카테고리 데이터에 속한 여러 행의 데이터들을 하나의 행 안에 데이터를 합칠 수 있을까?
Oracle에서는 XMLAGG, XMLELEMENT 함수를 통해 데이터들을 하나의 행 안에 합쳐 넣어 조회할 수 있다.
1. How to
--가상 테이블
WITH TEST_TABLE AS (
SELECT 'PL' LEAGUE, 'ENG' COUNTRY, 'Man City' TEAM FROM DUAL UNION ALL
SELECT 'PL' LEAGUE, 'ENG' COUNTRY, 'Tottenham' TEAM FROM DUAL UNION ALL
SELECT 'La LIGA' LEAGUE, 'SPN' COUNTRY, 'FC Barcelona' TEAM FROM DUAL UNION ALL
SELECT 'PL' LEAGUE, 'ENG' COUNTRY, 'Liverpool' TEAM FROM DUAL UNION ALL
SELECT 'La LIGA' LEAGUE, 'SPN' COUNTRY, 'Real Madrid' TEAM FROM DUAL UNION ALL
SELECT 'Bundes LIGA' LEAGUE, 'GER' COUNTRY, 'FC Bayern' TEAM FROM DUAL UNION ALL
SELECT 'Bundes LIGA' LEAGUE, 'GER' COUNTRY, 'Dortmund' TEAM FROM DUAL UNION ALL
SELECT 'La LIGA' LEAGUE, 'SPN' COUNTRY, 'AT Madrid' TEAM FROM DUAL UNION ALL
SELECT 'Bundes LIGA' LEAGUE, 'GER' COUNTRY, 'Leverkusen' TEAM FROM DUAL
)
--조회 쿼리
SELECT LEAGUE
, SUBSTR(
XMLAGG(XMLELEMENT(COL ,',', TEAM) ORDER BY COUNTRY).EXTRACT('//text()').GETSTRINGVAL(),2) TEAM
FROM TEST_TABLE
GROUP BY LEAGUE
XMLAGG, XMLELEMENT 함수를 이용하면 구분자 문자열과 값의 정렬까지 지정할 수 있다.
(가상 테이블)
(조회 테이블)