MySql将行转换为列,将列转换为行

MySql将行转换为列,将列转换为行,mysql,sql,transpose,Mysql,Sql,Transpose,我对行到列和列到行的转换有问题。 如果它只是将行转置到列或将列转置到行,我就可以做到这一点 这是我的数据表 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

我对行到列和列到行的转换有问题。 如果它只是将行转置到列或将列转置到行,我就可以做到这一点

这是我的数据表

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
等等

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

你可以这样做

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 | |月| CS-1 | CS-2 | CS-3| |-------|------|------|------| |一月| 100 | 111 | 331| |2003年2月22日123日| |2003年3月| 300 | 333 | 423日| |923年4月| 400 | 444 || |918年5月| 500 | 555 || |6月| 600 | 666 | 123|
这里是演示

这没有多大意义。假设你真的有一个合适的表,这里会有任意数量的行,变成任意数量的列。Mysql对您可以拥有的列数有限制。你为什么要这样做?