2013-09-26 4 views
4

У меня проблема с переносом строки в столбец и столбец для строки. Я могу это сделать, если он просто переносит строку в столбец или столбец для строки.MySql Transpose Row to Column and Column in Row

Это моя таблица с данными

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

Это не делает много смысла. Предполагая, что у вас действительно есть правильная таблица, здесь будет произвольное количество строк, чтобы стать произвольным числом столбцов. Mysql имеет ограничения на количество столбцов, которые вы можете иметь. почему ты хочешь сделать это? –

ответ

3

Вы можете сделать это таким образом

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 демо

+1

спасибо, все работает. – danielelisondaya