本文共 1687 字,大约阅读时间需要 5 分钟。
建表语句:
SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for tb-- ----------------------------DROP TABLE IF EXISTS `tb`;CREATE TABLE `tb` ( `姓名` varchar(10) DEFAULT NULL, `课程` varchar(10) DEFAULT NULL, `分数` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of tb-- ----------------------------INSERT INTO `tb` VALUES ('李四', '物理', '22');INSERT INTO `tb` VALUES ('李四', '数学', '53');INSERT INTO `tb` VALUES ('张三', '物理', '35');INSERT INTO `tb` VALUES ('李四', '语文', '52');INSERT INTO `tb` VALUES ('张三', '语文', '52')
表结构如下:
实现如下效果:查询语句如下:
SELECT 姓名, max( CASE WHEN 课程 = '语文' THEN 分数 ELSE 0 END ) 语文, max( CASE WHEN 课程 = '数学' THEN 分数 ELSE 0 END ) 数学, max( CASE WHEN 课程 = '物理' THEN 分数 ELSE 0 END ) 物理FROM tbGROUP BY 姓名;
建表语句:
DROP TABLE IF EXISTS `tb2`;CREATE TABLE `tb2` ( `姓名` varchar(10) DEFAULT NULL, `语文` int(11) DEFAULT NULL, `数学` int(11) DEFAULT NULL, `物理` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of tb2-- ----------------------------INSERT INTO `tb2` VALUES ('张三', '21', '212', '111');INSERT INTO `tb2` VALUES ('李四', '2', '212', '2');
表结构如下:
实现如下效果:查询语句:
SELECT 姓名, '语文' AS 课程, 语文 AS 分数FROM tb2UNION ALL SELECT 姓名, '数学' AS 课程, 数学 AS 分数 FROM tb2 UNION ALL SELECT 姓名, '物理' AS 课程, 物理 AS 分数 FROM tb2
总结:以上在实际开发应用中使用不是很好,在这只是做个记录,个人觉得实际开发中在业务中实现行列转换。