복붙노트

[SQL] 행에 열을 변환 MYSQL (피벗 테이블)

SQL

행에 열을 변환 MYSQL (피벗 테이블)

나는이 같은 테이블이

+---+-----+----+----+----+----+
|id |month|col1|col2|col3|col4|
+---+-----+----+----+----+----+
|101|Jan  |A   |B   |NULL|B   |
+---+-----+----+----+----+----+
|102|feb  |C   |A   |G   |E   |
+---+-----+----+----+----+----+

그리고이 같은 보고서를 만들려면

+----+---+---+
|desc|jan|feb|
+----+---+---+
|col1|A  |C  |
+----+---+---+
|col2|B  |A  |
+----+---+---+
|col3|0  |G  |
+----+---+---+
|Col4|B  |E  |
+----+---+---+

이와 캔 사람의 도움?

해결법

  1. ==============================

    1.당신이해야 할 것은 데이터 피벗 해제, 처음으로 다음을 돌리십시오. 당신이 UNPIVOT에 대한 UNION ALL 쿼리 및 피벗에 대한 사례와 집계 함수를 사용하여 복제해야합니다 그래서 그러나 불행하게도 MySQL은 이러한 기능이 없습니다.

    당신이해야 할 것은 데이터 피벗 해제, 처음으로 다음을 돌리십시오. 당신이 UNPIVOT에 대한 UNION ALL 쿼리 및 피벗에 대한 사례와 집계 함수를 사용하여 복제해야합니다 그래서 그러나 불행하게도 MySQL은 이러한 기능이 없습니다.

    UNPIVOT 또는 UNION ALL 조각 등 당신의 COL1, COL2에서 데이터를 받아 여러 행으로 변합니다 :

    select id, month, col1 value, 'col1' descrip
    from yourtable
    union all
    select id, month, col2 value, 'col2' descrip
    from yourtable
    union all
    select id, month, col3 value, 'col3' descrip
    from yourtable
    union all
    select id, month, col4 value, 'col4' descrip
    from yourtable
    

    데모와 SQL 바이올린을 참조하십시오.

    결과:

    |  ID | MONTH |  VALUE | DESCRIP |
    ----------------------------------
    | 101 |   Jan |      A |    col1 |
    | 102 |   feb |      C |    col1 |
    | 101 |   Jan |      B |    col2 |
    | 102 |   feb |      A |    col2 |
    | 101 |   Jan | (null) |    col3 |
    | 102 |   feb |      G |    col3 |
    | 101 |   Jan |      B |    col4 |
    | 102 |   feb |      E |    col4 |
    

    그런 다음 집계하고 원하는 형식으로이 변환하는 사례를 적용하는 하위 쿼리에이 포장 :

    select descrip, 
      max(case when month = 'jan' then value else 0 end) jan,
      max(case when month = 'feb' then value else 0 end) feb
    from
    (
      select id, month, col1 value, 'col1' descrip
      from yourtable
      union all
      select id, month, col2 value, 'col2' descrip
      from yourtable
      union all
      select id, month, col3 value, 'col3' descrip
      from yourtable
      union all
      select id, month, col4 value, 'col4' descrip
      from yourtable
    ) src
    group by descrip
    

    데모와 SQL 바이올린을 참조하십시오

    결과는 다음과 같습니다

    | DESCRIP | JAN | FEB |
    -----------------------
    |    col1 |   A |   C |
    |    col2 |   B |   A |
    |    col3 |   0 |   G |
    |    col4 |   B |   E |
    
  2. from https://stackoverflow.com/questions/13944417/mysql-convert-column-to-row-pivot-table by cc-by-sa and MIT license