피벗 관련 질문드립니다. 0 4 1,118

by MLB [MySQL] [2020.07.09 13:40:45]


안녕하세요.

피벗쿼리 관련하여 도움받고자 합니다.

[현재테이블 데이터 구조]

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

도움 부탁드리겠습니다.

by 마농 [2020.07.09 15:23:40]
-- 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
                           ) )
;

 


by MLB [2020.07.09 15:25:21]

마농님 MySQL이라 UNPIVOT, PIVOT 사용할수가 없습니다. ㅜㅜ


by 마농 [2020.07.09 15:29:45]
-- 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
;

 


by MLB [2020.07.09 15:31:42]

정말 감사드립니다. 가이드 해주신 방법으로 사용해보겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입