• decode函数_oracle(嘻嘻_有行转列)


    decode的几种用法
    1:使用decode判断字符串是否一样
    DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
    含义为
    IF 条件=值1 THEN
        RETURN(value 1)
    ELSIF 条件=值2 THEN
        RETURN(value 2)
        ......
    ELSIF 条件=值n THEN
        RETURN(value 3)
    ELSE
        RETURN(default)
    END IF


    sql测试
    select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10
    输出结果
    7369 smith
    7499 allen
    7521 ward
    7566 jones
    7654 unknow
    7698 unknow
    7782 unknow
    7788 unknow
    7839 unknow
    7844 unknow




    2:使用decode比较大小
    select decode(sign(var1-var2),-1,var 1,var2) from dual
    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
    sql测试
    select decode(sign(100-90),-1,100,90) from dual
    输出结果
    90
    100-90=10>0 则会返回1,所以decode函数最终取值为90
    反正
    select decode(sign(100-90),1,100,90) from dual
    输出结果
    100
    100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100




    3:使用decode函数分段
    工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪
    sql测试
    SELECT 
        ename,sal,
        DECODE(SIGN(sal - 5000),
                1,
                'high sal',
                0,
                'high sal',
                - 1,
                DECODE(SIGN(sal - 3000),
                        1,
                        'mid sal',
                        0,
                        'mid sal',
                        - 1,
                        DECODE(SIGN(sal - 1000),
                                1,
                                'low sal',
                                0,
                                'low sal',
                                - 1,
                                'low sal')))
    FROM
        emp
    输出结果
    SMITH   800   low sal
    ALLEN 1600 low sal
    WARD 1250 low sal
    JONES 2975 low sal
    MARTIN 1250 low sal
    BLAKE   2850 low sal
    CLARK 2450 low sal
    SCOTT 3000 mid sal
    KING  5000 high sal
    TURNER 1500 low sal
    ADAMS 1100 low sal
    JAMES 950         low sal
    FORD 3000 mid sal
    MILLER 1300 low sal


    4:利用decode实现表或者试图的行列转换
    sql测试
    SELECT 
           SUM(DECODE(ENAME,'SMITH',SAL,0))  SMITH,
           SUM(DECODE(ENAME,'ALLEN',SAL,0))  ALLEN,
           SUM(DECODE(ENAME,'WARD',SAL,0))   WARD,
           SUM(DECODE(ENAME,'JONES',SAL,0))  JONES,
           SUM(DECODE(ENAME,'MARTIN',SAL,0)) MARTIN FROM EMP
    输出结果如下
    SMITH  ALLEN  WARD   JONES  MARTIN
      800  1600   1250       2975       1250


    5:使用decode函数来使用表达式来搜索字符串
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
    decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
    sql测试
    SELECT 
        ENAME,
        SAL,
        DECODE(INSTR(ENAME, 'S'),
                0,
                '不含有s',
                '含有s') AS INFO
    FROM
        EMP
    输出结果
    SMITH 800           含有s
    ALLEN 1600   不含有s
    WARD 1250   不含有s
    JONES 2975    含有s
    MARTIN 1250    不含有s
    BLAKE 2850    不含有s
    CLARK 2450    不含有s
    SCOTT 3000   含有s
    KING 5000   不含有s
    TURNER 1500   不含有s
    ADAMS 1100   含有s
    JAMES 950            含有s
    FORD 3000   不含有s
    MILLER 1300   不含有s

  • 相关阅读:
    函数的扩展
    数组的扩展
    event(1)
    面试
    iframes
    浏览器CSS兼容
    BFC
    简单的一个轮播效果
    asp.net identity 2.2.0 在WebForm下的角色启用和基本使用(二)
    我的web框架设计
  • 原文地址:https://www.cnblogs.com/qiyaru/p/9156909.html
Copyright © 2020-2023  润新知