mysql 的列转行
时间: 2023-08-25 15:16:15 浏览: 50
MySQL的列转行可以通过使用UNION或UNION ALL来实现。UNION是将多个结果集合并成一个结果集,而UNION ALL则是将多个结果集合并成一个结果集,不进行去重操作。具体的操作方法如下:
方法一:使用UNION和子查询
```
SELECT 学生名称, '语文' AS 科目, 语文成绩
FROM 表名
UNION ALL
SELECT 学生名称, '数学' AS 科目, 数学成绩
FROM 表名
UNION ALL
SELECT 学生名称, '英语' AS 科目, 英语成绩
FROM 表名;
```
这种方法通过使用多个子查询,每个子查询都查询一个科目的成绩,并将结果集合并起来,最终得到列转行的结果。
方法二:使用CASE WHEN语句和GROUP BY子句
```
SELECT 学生名称,
MAX(CASE WHEN 科目 = '语文' THEN 成绩 END) AS 语文,
MAX(CASE WHEN 科目 = '数学' THEN 成绩 END) AS 数学,
MAX(CASE WHEN 科目 = '英语' THEN 成绩 END) AS 英语
FROM 表名
GROUP BY 学生名称;
```
这种方法通过使用CASE WHEN语句将不同科目的成绩放到不同的列中,并使用GROUP BY子句按学生名称进行分组,最终得到列转行的结果。
需要注意的是,以上两种方法都需要根据实际情况进行修改,确保表名、列名和数据类型与实际一致。<em>1</em><em>2</em><em>3</em>
#### 引用[.reference_title]
- *1* *2* *3* [MySQL列转行](https://blog.csdn.net/weixin_43920778/article/details/125326653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item]
[ .reference_list ]