메뉴 닫기

MySQL 가로형 데이터를 세로형으로 변환(PIVOT)

아래와 같이 table 에 저장된 data 를 가로에서 세로로 변경이 필요할 때가 있다.

idx col1 col2 col3
1 a b c
2 A B C

 

위 테이블의 샘플 table

SELECT 1 idx
     , ‘a’ col1, ‘b’ col2, ‘c’ col3
UNION ALL
SELECT 2
     , ‘A’, ‘B’, ‘C’

 

가로형 테이블을 세로형으로 임시 변환(중복 값 존재)

SELECT a.idx
     , b.m
     , CASE b.m
       WHEN  1 THEN col1
       WHEN  2 THEN col2
       WHEN  3 THEN col3
        END v
FROM (
        SELECT 1 idx
             , ‘a’ col1, ‘b’ col2, ‘c’ col3
         UNION ALL
        SELECT 2
             , ‘A’, ‘B’, ‘C’
        ) a
     , (
        SELECT 1 m
        UNION ALL SELECT  2
        UNION ALL SELECT  3
        ) b

 

중복 값을 제거하여 최종 결과물 생성

SELECT m idx
     , MIN(CASE idx WHEN 1 THEN v END) row1
     , MIN(CASE idx WHEN 2 THEN v END) row2
  FROM (
        SELECT a.idx
             , b.m
             , CASE b.m
               WHEN  1 THEN col1
               WHEN  2 THEN col2
               WHEN  3 THEN col3
                END v
          FROM (
                SELECT 1 idx
                     , ‘a’ col1, ‘b’ col2, ‘c’ col3
                 UNION ALL
                SELECT 2
                     , ‘A’, ‘B’, ‘C’
                ) a
             , (
                SELECT 1 m
                UNION ALL SELECT  2
                UNION ALL SELECT  3
                ) b
        ) c
 GROUP BY m

 

idx row1 row2
1 a A
2 b B
3 c C

 

 

 [polldaddy rating=”7739789″]

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x