Sql行转列,列转行

Sql行转列,列转行

行转列

在这里插入图片描述
建表语句

DROP TABLE IF EXISTS `test_score`;

CREATE TABLE `test_score`  (
  `studentID` int(11) NOT NULL,
  `subjectName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `score` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of test_score
-- ----------------------------
INSERT INTO `test_score` VALUES (1, '数学', '85');
INSERT INTO `test_score` VALUES (1, '语文', '65');
INSERT INTO `test_score` VALUES (1, '英语', '75');
INSERT INTO `test_score` VALUES (2, '数学', '89');
INSERT INTO `test_score` VALUES (2, '语文', '62');
INSERT INTO `test_score` VALUES (2, '英语', '76');
INSERT INTO `test_score` VALUES (3, '数学', '95');
INSERT INTO `test_score` VALUES (3, '语文', '78');
INSERT INTO `test_score` VALUES (3, '英语', '65');

实现sql语句

SELECT
	studentID,
	sum( CASE subjectName WHEN '语文' THEN score ELSE 0 END ) 语文,
	sum( CASE subjectName WHEN '数学' THEN score ELSE 0 END ) 数学,
	sum( CASE subjectName WHEN '英语' THEN score ELSE 0 END ) 英语 
FROM
	test_score 
GROUP BY
	studentID

结果
在这里插入图片描述

列转行

在这里插入图片描述

建表sql

DROP TABLE IF EXISTS `test_score`;
CREATE TABLE `test_score`  (
  `studentID` int(11) NOT NULL,
  `语文` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `数学` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `英语` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of test_score
-- ----------------------------
INSERT INTO `test_score` VALUES (1, '65', '85', '75');
INSERT INTO `test_score` VALUES (2, '62', '89', '76');
INSERT INTO `test_score` VALUES (3, '78', '95', '65');

实现sql

SELECT studentID, '语文' subjectName, 语文 score FROM test_score UNION ALL
SELECT studentID, '数学' subjectName, 数学 score FROM test_score UNION ALL
SELECT studentID, '英语' subjectName, 英语 score FROM test_score;

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43611145/article/details/89029464