mysql 行转列SQL如何写
时间: 2023-07-05 08:32:47 浏览: 85
mysql动态行转列
在MySQL中,可以使用 `GROUP BY`、`GROUP_CONCAT` 和 `CASE WHEN` 语句来实现行转列。
假设有一个表 `scores`,其中包含学生姓名、科目和成绩,我们想将每个学生的成绩转换为列:
```
+----+---------+-------+
| id | student | score |
+----+---------+-------+
| 1 | Alice | 90 |
| 2 | Bob | 80 |
| 3 | Alice | 95 |
| 4 | Bob | 85 |
+----+---------+-------+
```
我们可以使用以下查询语句:
```
SELECT student,
MAX(CASE WHEN id=1 THEN score ELSE NULL END) AS 'subject1',
MAX(CASE WHEN id=2 THEN score ELSE NULL END) AS 'subject2',
MAX(CASE WHEN id=3 THEN score ELSE NULL END) AS 'subject3',
MAX(CASE WHEN id=4 THEN score ELSE NULL END) AS 'subject4'
FROM scores
GROUP BY student;
```
这将输出:
```
+---------+----------+----------+----------+----------+
| student | subject1 | subject2 | subject3 | subject4 |
+---------+----------+----------+----------+----------+
| Alice | 90 | NULL | 95 | NULL |
| Bob | NULL | 80 | NULL | 85 |
+---------+----------+----------+----------+----------+
```
这里使用了 `MAX` 函数来将每个成绩转换为一列,并使用 `CASE WHEN` 语句将每个成绩映射到正确的列中。请注意,此查询语句假设每个学生只有四个科目,如果有更多科目,则需要使用更多的 `MAX(CASE WHEN)` 子句。
阅读全文