语法
用途
DECODE将expr与每个搜索值逐一进行比较。如果expr等于搜索值,则Oracle数据库返回相应的结果。如果找不到匹配,则Oracle返回默认值。如果省略默认值,那么Oracle返回null。
按照自己的理解DECODE函数就是把某列按照一定的条件转换成另外一个值
- 假如有一下表格(Scores):
ID | Age | Sex | Score | City |
---|---|---|---|---|
1 | 18 | 1 | 90 | 028 |
2 | 30 | 0 | 60 | 010 |
3 | 40 | 1 | 55 | 020 |
4 | 60 | 0 | 70 | 021 |
其中Age=1是男,Age=0是女。如果我们想让表格的数据更加直观可以这样写:
select ID,
Age,
DECODE(Sex,
1,'男',
0,'女',
'未知性别') Sex,
Score,
DECODE(City,
'028','成都',
'010','北京',
'020','广东',
'021','上海',
'未知') City
from Scores;
转换后的表格:
ID | Age | Sex | Score | City |
---|---|---|---|---|
1 | 18 | 男 | 90 | 成都 |
2 | 30 | 女 | 60 | 北京 |
3 | 40 | 男 | 55 | 广东 |
4 | 60 | 女 | 70 | 上海 |
- DECODE行转列操作
本文章使用Oracle Live Sql,具体可以登录此网站查看使用详情。本文章使用EMP表做演示。
- 如何统计出每个部门的人数
10号部门人数 | 20号部门人数 | 30号部门人数 |
---|---|---|
3 | 5 | 6 |
select SUM(DECODE(DEPTNO,10,1,0)) "10号部门人数",
SUM(DECODE(DEPTNO,20,1,0)) "20号部门人数",
SUM(DECODE(DEPTNO,30,1,0)) "30号部门人数"
from EMP;
DECODE(DEPTNO,10,1,0) 将DEPTNO==10的这列的值转换成1,如果DEPTNO!=10,那么这列的值转换为0. 然后用求和函数SUM求出10号部门人数。如果将SQL语句改成,会发生什么:
select SUM(DECODE(DEPTNO,10,2,0)) "10号部门人数",
SUM(DECODE(DEPTNO,20,0,1)) "20号部门人数",
SUM(DECODE(DEPTNO,30,1,0)) "30号部门人数"
from EMP;
10号部门人数 | 20号部门人数 | 30号部门人数 |
---|---|---|
6 | 9 | 6 |
解析
select SUM(DECODE(DEPTNO,10,2,0)) "10号部门人数", --将这列的值转换为2
SUM(DECODE(DEPTNO,20,0,1)) "20号部门人数", --不等于20号部门的人数,实际上就是10号和30号部门的人数
SUM(DECODE(DEPTNO,30,1,0)) "30号部门人数"
from EMP;