1. 程式人生 > >mysql行轉列

mysql行轉列

DROP TABLE IF EXISTS `class_info`;
CREATE TABLE `class_info` (
  `student_name` varchar(50) NOT NULL,
  `class_name` varchar(50) NOT NULL,
  `score` double(30,0) DEFAULT NULL,
  PRIMARY KEY (`student_name`,`class_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of class_info
-- ----------------------------
INSERT INTO `class_info` VALUES ('李娜', 'java', '100');
INSERT INTO `class_info` VALUES ('李娜', 'mysql', '100');
INSERT INTO `class_info` VALUES ('隨朗', 'java', '100');
INSERT INTO `class_info` VALUES ('隨朗', 'mysql', '90');
INSERT INTO `class_info` VALUES ('隨朗', '語文', '100');

表結構和資料如上:

目表是如圖:圖一 轉換成 圖二

圖一

圖二

SELECT
	student_name,
	MAX(
		CASE class_name
		WHEN 'java' THEN
			score
		END
	) java,
	MAX(
		CASE class_name
		WHEN 'mysql' THEN
			score
		END
	) mysql,
	MAX(
		CASE class_name
		WHEN '語文' THEN
			score
		END
	) 語文
FROM
	class_info
GROUP BY
	student_name

下圖,語文有為null的

解決方案:

SELECT
	student_name,
	MAX(
		CASE class_name
		WHEN 'java' THEN
			score
		END
	) java,
	MAX(
		CASE class_name
		WHEN 'mysql' THEN
			score
		END
	) mysql,
	MAX(
		CASE class_name
		WHEN '語文' THEN
			score
		ELSE
				0
		END
	) 語文
FROM
	class_info
GROUP BY
	student_name