表: cook表 +-------------+---------+ 字段名称 类型 +-------------+---------+ 年 int 月 int 值 double +-------------+---------+ 该表的每一行表示某年某月的数值 现需要行列进行转换,将月份列变成行,如果是同一个月的话则值相加。 查询结果如下例所示。 示例 1: 输入: 表:cook表 +---------+---------+---------+ 年 月 值 +---------+---------+---------+ 2009 1 1.1 2009 2 1.2 2009 3 1.3 2009 4 1.4 2010 1 2.1 2010 2 2.2 2010 3 2.3 2010 4 2.4 2010 4 1 +---------+---------+---------+ 输出: +---------+---------+---------+---------+---------+ 年 m1 m2 m3 m4 +---------+---------+---------+---------+---------+ 2009 1.1 1.2 1.3 1.4 2010 2.1 2.2 2.3 3.4 +---------+---------+---------+---------+---------+ 解释: 通过case when来判断月份所在的值,再利用分组聚合去除0,从而实现列转行
示例1

输入

CREATE TABLE `cook` 
(
    `年`   INT,
    `月`   INT,
    `值`   DOUBLE
);
INSERT INTO `cook` (`年`, `月`, `值`) VALUES 
(2009, 1, 1.1), 
(2009, 2, 1.2), 
(2009, 3, 1.3), 
(2009, 4, 1.4), 
(2010, 1, 2.1), 
(2010, 2, 2.2), 
(2010, 3, 2.3), 
(2010, 4, 2.4),
(2010, 4, 1);

输出

年|m1|m2|m3|m4
2009|1.1|1.2|1.3|1.4
2010|2.1|2.2|2.3|3.4
加载中...