我在将行移至列和将列移至行时遇到问题。如果只是将行转置为列或将列转置为行,则可以这样做。
这是我的数据表
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 |
这是 SQLFiddle 演示