mysql 行转列方法
时间: 2023-08-06 17:11:55 浏览: 43
mysql动态行转列
5星 · 资源好评率100%
在 MySQL 中,可以使用 `GROUP_CONCAT` 函数和 `CASE WHEN` 语句来实现行转列的操作。以下是一个示例:
假设有一个名为 `students` 的表,其中包含 `id`、`name` 和 `score` 三个字段,表示每个学生的成绩,如下所示:
| id | name | score |
|----|--------|-------|
| 1 | Alice | 80 |
| 2 | Bob | 90 |
| 3 | Carol | 85 |
| 4 | David | 75 |
| 5 | Edward | 95 |
现在需要将每个学生的成绩转换为一行,其中列名为学生姓名,列值为学生的成绩。可以使用以下 SQL 语句:
```
SELECT
id,
MAX(CASE WHEN name='Alice' THEN score END) AS Alice,
MAX(CASE WHEN name='Bob' THEN score END) AS Bob,
MAX(CASE WHEN name='Carol' THEN score END) AS Carol,
MAX(CASE WHEN name='David' THEN score END) AS David,
MAX(CASE WHEN name='Edward' THEN score END) AS Edward
FROM students
GROUP BY id;
```
执行上述 SQL 语句后,将得到以下结果:
| id | Alice | Bob | Carol | David | Edward |
|----|-------|-----|-------|-------|--------|
| 1 | 80 | NULL | NULL | NULL | NULL |
| 2 | NULL | 90 | NULL | NULL | NULL |
| 3 | NULL | NULL | 85 | NULL | NULL |
| 4 | NULL | NULL | NULL | 75 | NULL |
| 5 | NULL | NULL | NULL | NULL | 95 |
以上结果需要注意的是,如果某个学生没有成绩,则在相应的列中显示为 `NULL`。可以使用 `COALESCE` 函数将其转换为其他值。例如,以下 SQL 语句将 `NULL` 转换为 0:
```
SELECT
id,
COALESCE(MAX(CASE WHEN name='Alice' THEN score END), 0) AS Alice,
COALESCE(MAX(CASE WHEN name='Bob' THEN score END), 0) AS Bob,
COALESCE(MAX(CASE WHEN name='Carol' THEN score END), 0) AS Carol,
COALESCE(MAX(CASE WHEN name='David' THEN score END), 0) AS David,
COALESCE(MAX(CASE WHEN name='Edward' THEN score END), 0) AS Edward
FROM students
GROUP BY id;
```
阅读全文