CASE WHEN 和 DECODE()的区别:
CASE WHEN 是一种条件判断
DECODE() 是一种等值判断
代码格式:
CASE WHEN JOB = 'PRESIDENT' THEN '总裁级'
CASE JOB WHEN 'PRESIDENT' THEN '总裁级'
DECODE(JOB,'PRESIDENT','总裁级')
查出员工的工作类型,
如果是 PRESIDENT 是总裁级,
MANAGER 中层管理,
ANALYST 分析师,
SALESMAN 销售人员,
其他的岗位类型为 临时工
SELECT E.ENAME,
E.JOB,
DECODE(E.JOB,
'PRESIDENT',
'总裁级',
'MANAGER',
'中层管理',
'ANALYST',
'分析师',
'SALESMAN',
'销售人员',
'临时工') 岗位类型1,
CASE E.JOB
WHEN 'PRESIDENT' THEN '总裁级'
WHEN 'MANAGER' THEN '中层管理'
WHEN 'ANALYST' THEN '分析师'
WHEN 'SALESMAN' THEN '销售人员'
ELSE '临时工' END 岗位类型2
FROM EMP E;
假设公司想给这些职员加工资,其标准是:
工资在3000元以下的加20%;工资在3000元或以上的加15%,
SELECT
E.ename ,
E.sal,
CASE WHEN E.sal >= 3000 THEN E.sal*1.15
ELSE E.sal*1.2
END 加薪后1,
DECODE(SIGN(E.sal -3000) , -1,E.sal*1.2 ,E.sal*1.15 ) 加薪后2
FROM EMP E
ORDER BY e.sal DESC;
decode() 比较的话需要 SIGN 辅助比较才可以:
SELECT SIGN(2-1) , SIGN(3-5), SIGN(100-100) FROM DUAL;
1 > 0 -2 < 0 0 = 0