5

行から列、列から行への転置に問題があります。行から列、または列から行を転置するだけであれば、それを行うことができます。

これはデータを含む私のテーブルです

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

等..

誰でもこれを行う方法を知っていますか? どうもありがとう!

4

1 に答える 1

5

このようにできます

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')

出力:

| | 月 | 月 | CS-1 | CS-2 | CS-3 |
|-------|------|------|------|
| | 1月 | 100 | 111 | 331 |
| | 2月 | 200 | 222 | 123 |
| | 3月 | 300 | 333 | 423 |
| | 4月 | 400 | 444 | 923 |
| | 5月 | 500 | 555 | 918 |
| | じゅん | 600 | 666 | 123 |

これがSQLFiddleのデモです

于 2013-09-26T05:39:31.520 に答える