在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
|