mysql VARCHAR行转列
时间: 2023-09-02 07:11:39 浏览: 95
mysql动态行转列
在 MySQL 中,可以使用 `GROUP_CONCAT` 函数将多行数据合并成一行,然后使用 `SUBSTRING_INDEX` 函数将其拆分成多列,实现行转列的功能。
假设有以下示例表 `student`:
| id | name | course |
|----|-------|--------|
| 1 | Alice | Math |
| 1 | Alice | English|
| 1 | Alice | Physics|
| 2 | Bob | Math |
| 2 | Bob | Biology|
| 3 | Carl | English|
| 3 | Carl | Physics|
| 3 | Carl | Biology|
要将每个学生的课程行转列,可以使用以下 SQL 语句:
```sql
SELECT id, name,
SUBSTRING_INDEX(GROUP_CONCAT(IF(course = 'Math', course, NULL)), ',', 1) AS Math,
SUBSTRING_INDEX(GROUP_CONCAT(IF(course = 'English', course, NULL)), ',', 1) AS English,
SUBSTRING_INDEX(GROUP_CONCAT(IF(course = 'Physics', course, NULL)), ',', 1) AS Physics,
SUBSTRING_INDEX(GROUP_CONCAT(IF(course = 'Biology', course, NULL)), ',', 1) AS Biology
FROM student
GROUP BY id, name;
```
执行以上 SQL 语句后,会得到以下结果:
| id | name | Math | English | Physics | Biology |
|----|-------|------|---------|---------|---------|
| 1 | Alice | Math | English | Physics | NULL |
| 2 | Bob | Math | NULL | NULL | Biology |
| 3 | Carl | NULL | English | Physics | Biology |
以上语句中,使用了 `GROUP_CONCAT` 函数将每个学生的课程合并成了一个字符串,然后使用 `IF` 函数判断每个课程是否符合条件,如果符合则返回课程名称,否则返回 `NULL`。最后使用 `SUBSTRING_INDEX` 函数将合并后的字符串拆分成多个列,得到最终结果。
阅读全文