美文网首页
【原创】Oracle DECODE 函数解释与用法

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

作者: MingRu | 来源:发表于2017-11-14 12:00 被阅读0次

    语法

    image

    用途

    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表做演示。
      image.png
    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;
    

    相关文章

      网友评论

          本文标题:【原创】Oracle DECODE 函数解释与用法

          本文链接:https://www.haomeiwen.com/subject/vbixvxtx.html