oracle case when 行列转换
时间: 2023-04-25 20:00:28 浏览: 303
Oracle中的CASE WHEN语句可以用于行列转换,具体实现方法如下:
1. 使用SELECT语句查询需要转换的数据,并使用CASE WHEN语句将需要转换的列转换为行。
2. 使用PIVOT语句将转换后的数据进行列转行操作。
例如,将以下表格中的性别列转换为行:
| 姓名 | 性别 |
| ---- | ---- |
| 张三 | 男 |
| 李四 | 女 |
| 王五 | 男 |
可以使用以下SQL语句进行转换:
SELECT *
FROM (
SELECT 姓名, 性别
FROM 表名
)
PIVOT (
COUNT(姓名)
FOR 性别 IN ('男', '女')
);
转换后的结果如下:
| 姓名 | '男' | '女' |
| ---- | ---- | ---- |
| 张三 | 1 | 0 |
| 李四 | 0 | 1 |
| 王五 | 1 | 0 |
其中,'男'和'女'是转换后的列名,1表示该行对应的姓名是该性别,0表示不是该性别。
相关问题
oracle 行列转换
在Oracle中,可以使用CASE WHEN语句来实现行列转换。引用\[1\]中的示例展示了如何将多行一列的数据转换为一行多列的数据。例如,可以使用以下SQL语句将学生的成绩表转换为每个学生一行的形式,每个科目作为列名,对应的成绩作为值:
SELECT NAME,
MAX(CASE WHEN COURSE='语文' THEN SCORE END) "语文",
MAX(CASE WHEN COURSE='数学' THEN SCORE END) "数学",
MAX(CASE WHEN COURSE='英语' THEN SCORE END) "英语",
MAX(CASE WHEN COURSE='物理' THEN SCORE END) "物理",
SUM(SCORE) "总分"
FROM stu
GROUP BY NAME;
同样地,引用\[2\]中的示例展示了如何将一行多列的数据转换为多行一列的数据。例如,可以使用以下SQL语句将科目和对应的成绩转换为每个学生一行的形式:
SELECT NAME,
CASE WHEN LV = 1 THEN '语文'
WHEN LV = 2 THEN '数学'
WHEN LV = 3 THEN '英语'
WHEN LV = 4 THEN '物理'
END 科目,
CASE WHEN LV = 1 THEN langu
WHEN LV = 2 THEN math
WHEN LV = 3 THEN english
WHEN LV = 4 THEN pycial
END 成绩
FROM (SELECT *
FROM course, (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 4)
)
ORDER BY 1, 2;
此外,引用\[3\]中还提供了将结果集转换为一行或多行的示例。例如,可以使用SUM或COUNT函数将每个部门的人数转换为一行:
SELECT SUM(CASE WHEN DEPTNO = 10 THEN 1 END) D_10,
SUM(CASE WHEN DEPTNO = 20 THEN 1 END) D_20,
SUM(CASE WHEN DEPTNO = 30 THEN 1 END) D_30
FROM EMP;
或者可以使用子查询和MAX函数将每个部门的人数转换为多行:
SELECT MAX(CASE WHEN DEPTNO = 10 THEN CN END) D_10,
MAX(CASE WHEN DEPTNO = 20 THEN CN END) D_20,
MAX(CASE WHEN DEPTNO = 30 THEN CN END) D_30
FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO);
这些是在Oracle中进行行列转换的一些常见方法。希望对你有所帮助!
#### 引用[.reference_title]
- *1* *2* *3* [Oracle中行列互转](https://blog.csdn.net/xiaochenXIHUA/article/details/120409641)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文