복붙노트

[SQL] 행에 열 및 열로 MySQL의 트랜스 행 [중복]

SQL

행에 열 및 열로 MySQL의 트랜스 행 [중복]

내가 행에 컬럼과 컬럼에 행을 전치에 문제가 있습니다. 나는 열 또는 열 그냥 전치 행 행 할 경우 그렇게 할 수 있습니다.

데이터를이 내 테이블

UNIT|JAN|FEB|MAR|APR|MEI|JUN
CS-1|100|200|300|400|500|600
CS-2|111|222|333|444|555|666
CS-3|331|123|423|923|918|123

나는 다음과 같은 출력을 좀하고 싶습니다

MONTH|CS-1|CS-2|CS-3
JAN  |100 |111 |331
FEB  |200 |222 |123
MAR  |300 |333 |423

기타..

누구를 알고 어떻게이 일을? 매우 감사합니다!

해결법

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

    1.당신은이 방법을 수행 할 수 있습니다

    당신은이 방법을 수행 할 수 있습니다

    SELECT month,
           MAX(CASE WHEN unit = 'CS-1' THEN value END) `CS-1`,
           MAX(CASE WHEN unit = 'CS-2' THEN value END) `CS-2`,
           MAX(CASE WHEN unit = 'CS-3' THEN value END) `CS-3`
      FROM
    (
      SELECT unit, month,
             CASE month 
                WHEN 'JAN' THEN jan
                WHEN 'FEB' THEN feb
                WHEN 'MAR' THEN mar
                WHEN 'APR' THEN apr
                WHEN 'MAY' THEN may
                WHEN 'JUN' THEN jun
             END value
        FROM table1 t CROSS JOIN
      (
        SELECT 'JAN' month UNION ALL
        SELECT 'FEB' UNION ALL
        SELECT 'MAR' UNION ALL
        SELECT 'APR' UNION ALL
        SELECT 'MAY' UNION ALL
        SELECT 'JUN'
      ) c
    ) q
     GROUP BY month
     ORDER BY FIELD(month, 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN')
    

    산출:

    | MONTH | CS-1 | CS-2 | CS-3 |
    |-------|------|------|------|
    |   JAN |  100 |  111 |  331 |
    |   FEB |  200 |  222 |  123 |
    |   MAR |  300 |  333 |  423 |
    |   APR |  400 |  444 |  923 |
    |   MAY |  500 |  555 |  918 |
    |   JUN |  600 |  666 |  123 |
    

    여기 SQLFiddle 데모입니다

  2. from https://stackoverflow.com/questions/19019453/mysql-transpose-row-into-column-and-column-into-row by cc-by-sa and MIT license