如何在Mysql中转置表

时间:2013-12-17 03:37:06

标签: mysql

如何转换列和主行?

TBL1

     |   p1   |   p2   |   p3   | ...
g1   |    1   |   2    |    3   | ...
g2   |    4   |   5    |    6   | ...
g3   |    7   |   8    |    9   | ...

预期结果

     |   g1   |   g2   |   g3   | ...
p1   |    1   |   4    |    7   | ...
p2   |    2   |   5    |    8   | ...
p3   |    3   |   6    |    9   | ...     

如何使用tbl1

制作预期结果表

1 个答案:

答案 0 :(得分:0)

这是MySql中PIVOT表的概念。

在这里,我考虑了P1,P2和P3列,给出了问题的解决方案。看看这个SQL fiddle并了解它是如何工作的,之后你就可以自己做了。

SELECT TEMP,
       MAX(CASE WHEN unit = 'G1' THEN value END) `G1`,
       MAX(CASE WHEN unit = 'G2' THEN value END) `G2`,
       MAX(CASE WHEN unit = 'G3' THEN value END) `G3`
  FROM
(
  SELECT unit, TEMP,
         CASE TEMP
            WHEN 'P1' THEN P1
            WHEN 'P2' THEN P2
            WHEN 'P3' THEN P3
         END value
    FROM tbl1 t CROSS JOIN
  (
    SELECT 'P1' TEMP UNION ALL
    SELECT 'P2' UNION ALL
    SELECT 'P3' 
  ) c
) q
 GROUP BY TEMP
 ORDER BY FIELD(TEMP, 'P1', 'P2', 'P3')