MySQL 方案:先单独提取每一门科目数据生成子结果,再通过 UNION ALL 合并所有结果集完成列转行
1. MySQL 测试建表与插入数据
sql复制代码
CREATE TABLE stu_score (
name VARCHAR(20) COMMENT '学生姓名',
english INT COMMENT '英语成绩',
maths INT COMMENT '数学成绩',
music INT COMMENT '音乐成绩'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO stu_score(name, english, maths, music)
VALUES ('Jim', 90, 88, 99);
sql复制代码
SELECT name, 'english' AS subject, english AS score FROM stu_score
UNION ALL
SELECT name, 'maths' AS subject, maths AS score FROM stu_score
UNION ALL
SELECT name, 'music' AS subject, music AS score FROM stu_score;