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

ETC..

有人知道怎么做吗?非常感谢!

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 |
|-------|------|------|------|
| 一月 | 100 | 111 | 331 |
| 二月 | 200 | 222 | 123 |
| 三月 | 300 | 333 | 423 |
| 四月 | 400 | 第444章 第923章
| 五月 | 500 | 555 | 918 |
| 六月 | 600 | 第666章 123 |

这是SQLFiddle演示

于 2013-09-26T05:39:31.520 回答