将行数据转换为MySQL中的列

时间:2014-10-12 19:36:11

标签: mysql

我有MySQL表,以这种格式存储数据

Type|Month|Count
----+-----+-------
1   |9    |4
3   |9    |7
99  |9    |2
1   |10   |6
3   |10   |7
99  |10   |9
.......

类型列可以包含3个值1,3,99中的任何一个。 月份将保持1到12之间的值。 伯爵可以是随机的。

我想要的输出是这样的:

Month|Type1|Type3|Type99
-----+-----+-----+-------
9    |4    |7    |2
10   |6    |7    |9
................

我偶然发现了this Demo,但对此并不了解。

以下是带有演示数据的示例fiddle

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

尝试以下查询,您需要知道的是MYSQL枢轴,以下查询解决了您的问题

静态方式

SELECT Month, 
 SUM(CASE WHEN Type = 1 THEN 'count' ELSE 0 END) AS Type1,
 SUM(CASE WHEN Type = 3 THEN 'count' ELSE 0 END) AS Type3,  
 SUM(CASE WHEN Type = 99 THEN 'count' ELSE 0 END) AS Type99
FROM my_table
GROUP BY Month

DYNAMIC WAY

GROUP_CONCATCONCAT

一起使用
SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT 
    CONCAT('SUM(CASE WHEN Type= ', 
    Type, ' THEN count ELSE 0 END) AS '
    , 'Type', Type))
INTO @sql
FROM
  my_table;

SET @sql = CONCAT('SELECT Month, ', @sql, ' 
                  FROM my_table 
                   GROUP BY Month');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;