case when列转行
时间: 2023-11-19 22:55:44 浏览: 77
根据提供的引用内容,case when是一种MySQL中的条件语句,用于根据条件返回不同的结果。而列转行是一种数据转换的方式,将原本在列中的数据转换为行中的数据。在MySQL中,可以使用case when语句实现列转行的功能。具体实现方法可以参考以下步骤:
1. 使用UNION ALL将多个SELECT语句的结果合并为一个结果集。
2. 在每个SELECT语句中使用case when语句,将需要转换的列作为条件,将对应的值作为结果。
3. 在每个SELECT语句中添加一个标识列,用于区分不同的行。
4. 在最外层的SELECT语句中使用GROUP BY语句,将结果按照标识列进行分组。
这样就可以将原本在列中的数据转换为行中的数据了。例如,假设有一个表格包含学生姓名和成绩,需要将成绩转换为行中的数据,可以使用以下SQL语句:
```
SELECT '语文' AS subject,
MAX(CASE WHEN name = '张三' THEN score ELSE NULL END) AS '张三',
MAX(CASE WHEN name = '李四' THEN score ELSE NULL END) AS '李四',
MAX(CASE WHEN name = '王五' THEN score ELSE NULL END) AS '王五'
FROM scores
UNION ALL
SELECT '数学' AS subject,
MAX(CASE WHEN name = '张三' THEN score ELSE NULL END) AS '张三',
MAX(CASE WHEN name = '李四' THEN score ELSE NULL END) AS '李四',
MAX(CASE WHEN name = '王五' THEN score ELSE NULL END) AS '王五'
FROM scores
UNION ALL
SELECT '英语' AS subject,
MAX(CASE WHEN name = '张三' THEN score ELSE NULL END) AS '张三',
MAX(CASE WHEN name = '李四' THEN score ELSE NULL END) AS '李四',
MAX(CASE WHEN name = '王五' THEN score ELSE NULL END) AS '王五'
FROM scores
GROUP BY subject;
```
这个SQL语句将成绩表格中的数据按照学科和学生进行了转换,将每个学生在不同学科下的成绩转换为了行中的数据。