条件判断函数

在oracle也可以实现if then else

case函数,sql1999就是所有sql都可以用!

语法: case 源值 when 等于值 then 返回值 when 等于值 then 返回值 when 对比值 then 返回值 else 默认值 end

注:空格分隔,不需要写逗号

注:when条件判断是“等于”!!!

注:对比的表达式返回的数据类型应该相同!!!也就是then和else返回的值类型要形同!!! else可选

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
--当job中,等于clerk时,sal*1.1;等于memager时,sal*1.2
SQL> SELECT ENAME, CASE JOB WHEN  'CLERK'  THEN SAL*1.1    WHEN 'MANAGER' THEN SAL*1.2  end from emp;
ENAME      CASEJOBWHEN'CLERK'THENSAL*1.1W
---------- ------------------------------
SMITH                                 880
ALLEN      
WARD       
JONES                                3570
MARTIN     
BLAKE                                3420
CLARK                                2940
SCOTT      
KING       
TURNER     
ADAMS                                1210
JAMES                            1045.605
FORD       
MILLER                               1430

行列转换:

使用select子查询+case进行单月查询

使用select子查询+case进行季度查询

decode是简化的case,将 when和then改成了逗号,且case和end变成了括号,更加简洁了,

注:和decode和shell中的case功能相同,都是相等值判断!!!

语法1:decode (判断字段,匹配值1, 打印值1,匹配值2,打印值2)

注:当匹配上的值就会打印对应的值,若没匹配上打印值就是空!!!

语法2:decode (判断字段,匹配值1, 打印值1,匹配值2,打印值2,默认值)

注:当匹配上的值就会打印对应的值,若没匹配上打印值就是默认值!!!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
--当job中,等于clerk时,sal*1.1;等于memager时,sal*1.2
SQL> SELECT ENAME, decode( JOB,   'CLERK',SAL*1.1,    'MANAGER',SAL*1.2) from emp;
ENAME      DECODE(JOB,'CLERK',SAL*1.1,'MA
---------- ------------------------------
SMITH                                 880
ALLEN      
WARD       
JONES                                3570
MARTIN     
BLAKE                                3420
CLARK                                2940
SCOTT      
KING       
TURNER     
ADAMS                                1210
JAMES                            1045.605
FORD       
MILLER                               1430