准备表:
CREATE TABLE student( id int PRIMARY KEY AUTO_INCREMENT, name varchar(20), course varchar(20), score float); INSERT INTO student(name, course, score) VALUES ('张三','数学',34), ('张三','语文',58), ('张三','英语',58), ('李四','数学',45), ('李四','语文',87), ('李四','英语',45), ('王五','数学',76), ('王五','语文',34), ('王五','英语',89);
mysql> select * from student;
+----+--------+--------+-------+
| id | name | course | score |
+----+--------+--------+-------+
| 1 | 张三 | 数学 | 34 |
| 2 | 张三 | 语文 | 58 |
| 3 | 张三 | 英语 | 58 |
| 4 | 李四 | 数学 | 45 |
| 5 | 李四 | 语文 | 87 |
| 6 | 李四 | 英语 | 45 |
| 7 | 王五 | 数学 | 76 |
| 8 | 王五 | 语文 | 34 |
| 9 | 王五 | 英语 | 89 |
+----+--------+--------+-------+
列转行之后:
SELECT name, max(CASE WHEN course = "语文" THEN score ELSE 0 END) 语文, max(CASE WHEN course = "数学" THEN score ELSE 0 END) 数学, max(CASE WHEN course = "英语" THEN score ELSE 0 END) 英语 FROM student1 GROUP BY name;
+--------+--------+--------+--------+
| name | 数学 | 语文 | 英语 |
+--------+--------+--------+--------+
| 张三 | 34 | 58 | 58 |
| 李四 | 45 | 87 | 45 |
| 王五 | 76 | 34 | 89 |
+--------+--------+--------+--------+