假设有如下的表结构:
id | name | course |
---|---|---|
1 | Tom | Math |
2 | Tom | English |
3 | Tom | Science |
4 | John | Math |
5 | John | English |
6 | John | History |
我们想要将每个学生的课程转换成列,得到如下的结果:
name | Math | English | Science | History |
---|---|---|---|---|
Tom | Math | English | Science | NULL |
John | Math | English | NULL | History |
可以使用MySQL中的GROUP BY
和CASE WHEN
语句实现:
SELECT
name,
MAX(CASE WHEN course = 'Math' THEN course END) AS Math,
MAX(CASE WHEN course = 'English' THEN course END) AS English,
MAX(CASE WHEN course = 'Science' THEN course END) AS Science,
MAX(CASE WHEN course = 'History' THEN course END) AS History
FROM
students
GROUP BY
name;
以上SQL语句会将每个学生的课程按照名称转换成列,未选修的课程用NULL
填充。