안녕하세요.
피벗쿼리 관련하여 도움받고자 합니다.
[현재테이블 데이터 구조]
ID | CNT | WT |
D120002 | 45347 | 18480.2 |
D120004 | 933210.3 | 200898.9 |
D120005 | 218829.3 | 117779.3 |
D120006 | 37250 | 11029 |
D120008 | 425856 | 16255.3 |
D120014 | 1003966.3 | 233248.9 |
이 구조의 데이터를 아래와 같이 표현하고자 합니다.
D120002 | D120004 | D120005 | D120006 | D120008 | D120014 | |
CNT | 45347 | 933210.3 | 218829.3 | 37250 | 425856 | 1003966.3 |
WT | 18480.2 | 200898.9 | 117779.3 | 11029 | 16255.3 | 233248.9 |
도움 부탁드리겠습니다.
-- Oracle -- WITH t AS ( SELECT 'D120002' id, 45347.0 cnt, 18480.2 wt FROM dual UNION ALL SELECT 'D120004', 933210.3, 200898.9 FROM dual UNION ALL SELECT 'D120005', 218829.3, 117779.3 FROM dual UNION ALL SELECT 'D120006', 37250.0, 11029.0 FROM dual UNION ALL SELECT 'D120008', 425856.0, 16255.3 FROM dual UNION ALL SELECT 'D120014', 1003966.3, 233248.9 FROM dual ) SELECT * FROM t UNPIVOT (v FOR gb IN (cnt, wt)) PIVOT (MIN(v) FOR id IN ( 'D120002' D120002 , 'D120004' D120004 , 'D120005' D120005 , 'D120006' D120006 , 'D120008' D120008 , 'D120014' D120014 ) ) ;
-- MySQL -- WITH t AS ( SELECT 'D120002' id, 45347.0 cnt, 18480.2 wt UNION ALL SELECT 'D120004', 933210.3, 200898.9 UNION ALL SELECT 'D120005', 218829.3, 117779.3 UNION ALL SELECT 'D120006', 37250.0, 11029.0 UNION ALL SELECT 'D120008', 425856.0, 16255.3 UNION ALL SELECT 'D120014', 1003966.3, 233248.9 ) SELECT gb , MIN(CASE id WHEN 'D120002' THEN v END) D120002 , MIN(CASE id WHEN 'D120004' THEN v END) D120004 , MIN(CASE id WHEN 'D120005' THEN v END) D120005 , MIN(CASE id WHEN 'D120006' THEN v END) D120006 , MIN(CASE id WHEN 'D120008' THEN v END) D120008 , MIN(CASE id WHEN 'D120014' THEN v END) D120014 FROM (SELECT 'CNT' gb, cnt v, id FROM t UNION ALL SELECT 'WT' gb, wt v, id FROM t ) a GROUP BY gb ;