在 MySQL 中,可以使用 GROUP_CONCAT 函数将多行数据的某个字段合并成一行,并使用 CASE 表达式实现列转行。
例如,以下是一个示例表:
+----+-------+-------+
| id | name | grade |
+----+-------+-------+
| 1 | Alice | A |
| 2 | Bob | B |
| 3 | Carol | C |
| 4 | Dave | A |
| 5 | Eve | B |
+----+-------+-------+
如果要将 grade 转换为列,并按照不同的值进行汇总,则可以使用以下查询语句:
SELECT
name,
MAX(CASE WHEN grade = 'A' THEN 'Yes' ELSE '' END) AS A,
MAX(CASE WHEN grade = 'B' THEN 'Yes' ELSE '' END) AS B,
MAX(CASE WHEN grade = 'C' THEN 'Yes' ELSE '' END) AS C
FROM
students
GROUP BY
name;
该查询结果如下:
+-------+---+---+---+
| name | A | B | C |
+-------+---+---+---+
| Alice | Yes | |
| Bob | | Yes |
| Carol | | | Yes |
| Dave | Yes | |
| Eve | | Yes |
+-------+---+---+---+
其中,MAX 函数用于消除重复记录,并返回非空值。通过这种方式,我们可以将原来的多个行转换为单个行,并且每个值都是单独的列。