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;
结果