【原创】Oracle DECODE 函数解释与用法

2017-11-14  本文已影响0人  MingRu

语法

image

用途

DECODE将expr与每个搜索值逐一进行比较。如果expr等于搜索值,则Oracle数据库返回相应的结果。如果找不到匹配,则Oracle返回默认值。如果省略默认值,那么Oracle返回null。
按照自己的理解DECODE函数就是把某列按照一定的条件转换成另外一个值

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 上海
  1. 如何统计出每个部门的人数
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;
上一篇下一篇

猜你喜欢

热点阅读