横表:
CREATE TABLE school
(
姓名 VARCHAR(20),
课程 VARCHAR(20),
成绩 INT(2),
等级 VARCHAR(2)
)
INSERT INTO school(姓名,课程,成绩,等级) VALUES('张三','语文',60,'丙');
INSERT INTO school(姓名,课程,成绩,等级) VALUES('张三','数学',70,'丙');
INSERT INTO school(姓名,课程,成绩,等级) VALUES('张三','英语',80,'乙');
INSERT INTO school(姓名,课程,成绩,等级) VALUES('李四','语文',90,'甲');
INSERT INTO school(姓名,课程,成绩,等级) VALUES('李四','数学',100,'甲');
转纵表:
SELECT 姓名,
SUM(CASE 课程 WHEN '语文' THEN 成绩 ELSE 0 END) AS '语文',
SUM(CASE 课程 WHEN '数学' THEN 成绩 ELSE 0 END) AS 数学,
SUM(CASE 课程 WHEN '英语' THEN 成绩 ELSE 0 END) AS 英语
FROM school
GROUP BY 姓名
如果字段不为数值类型,就要用max()函数
SELECT 姓名,
MAX(CASE 课程 WHEN '语文' THEN 等级 ELSE '丁' END) AS '语文',
MAX(CASE 课程 WHEN '数学' THEN 等级 ELSE '丁' END) AS '数学',
MAX(CASE 课程 WHEN '英语' THEN 等级 ELSE '丁' END) AS '英语'
FROM school
GROUP BY 姓名
有兴趣的可以试试