seq group data ============= 1 1 A 1 2 B 1 3 A 1 3 C 1 4 B 2 1 A 2 1 D 2 2 B 2 3 A 2 4 C =============
위와 같이 출력되는 데이터를 아래와 같이 나오게 하고 싶어요 A | B | A, C | B A , D | B | A | C group은 seq마다 생성되는 일련번호라 고정 데이터는 아니에요 이걸 쿼리로 가능할까요? 고수님의 답변을 기다립니다 ㅠㅠ
WITH t AS ( SELECT 1 seq, 1 grp, 'A' v FROM dual UNION ALL SELECT 1, 2, 'B' FROM dual UNION ALL SELECT 1, 3, 'A' FROM dual UNION ALL SELECT 1, 3, 'C' FROM dual UNION ALL SELECT 1, 4, 'B' FROM dual UNION ALL SELECT 2, 1, 'A' FROM dual UNION ALL SELECT 2, 1, 'D' FROM dual UNION ALL SELECT 2, 2, 'B' FROM dual UNION ALL SELECT 2, 3, 'A' FROM dual UNION ALL SELECT 2, 4, 'C' FROM dual ) SELECT * FROM t PIVOT (LISTAGG(v, ',') WITHIN GROUP(ORDER BY v) FOR grp IN (1, 2, 3, 4)) ;
마농님 정말 감사드립니다만... 오라클 10G 버전이라 LISTAGG 함수가 안 먹히네요 ㅠㅠ 저걸 빼고 하려면 많이 복잡할까요? ㅠㅠ
SELECT seq , MIN(DECODE(grp, 1, v)) v1 , MIN(DECODE(grp, 2, v)) v2 , MIN(DECODE(grp, 3, v)) v3 , MIN(DECODE(grp, 4, v)) v4 FROM (SELECT seq, grp -- , SUBSTR(XMLAGG(XMLELEMENT(x, ',', v) ORDER BY v) -- .EXTRACT('//text()'), 2) v -- 9i , wm_concat(v) v -- 10g -- , LISTAGG(v, ',') WITHIN GROUP(ORDER BY v) v -- 11g FROM t GROUP BY seq, grp ) GROUP BY seq ;
Pivot 도 11G 부터
마농님 정말로 감사드립니다!!!!