您的位置:首页 > 数据库 > MySQL

Mysql 行列转置

2016-03-15 11:00 393 查看
建表代码

/*
Navicat MySQL Data Transfer

Source Server         : 115.28.24.231
Source Server Version : 50621
Source Host           : 115.28.24.231:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50621
File Encoding         : 65001

Date: 2016-03-15 11:50:49
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`name` varchar(11) DEFAULT NULL,
`Math` int(11) DEFAULT NULL,
`English` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('甲', '89', '78');
INSERT INTO `student` VALUES ('乙', '77', '81');
INSERT INTO `student` VALUES ('丙', '87', '98');


if语句使用:

SELECT

IF (
name = 'ww',
'万',
'其他'
) AS
VALUE,
math,
english
FROM
student


Case语句使用

SELECT
(
case username
WHEN 'ww' THEN '万'
ELSE '其他' END
) AS
VALUE,
math,
english
FROM
student


行列转置

SELECT
col2 AS '课程',
#甲的xx课程的成绩
sum(IF(NAME = '甲', col3, 0)) AS '甲',
#乙的xx课程的成绩
sum(IF(NAME = '乙', col3, 0)) AS '乙',
#丙的xx课程的成绩
sum(IF(NAME = '丙', col3, 0)) AS '丙'
FROM
(
#形成name(甲乙丙),col2(math,english),col3(col2对应的成绩)
SELECT
NAME,
'数学' AS col2,
student.math AS col3
FROM
student
GROUP BY
NAME
UNION
SELECT
NAME,
'英语' AS col2,
student.english AS col3
FROM
student
GROUP BY
NAME
) AS val #根据课程分组
GROUP BY
col2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: