oracle 数据库问题
发布网友
发布时间:2022-04-12 10:48
我来回答
共3个回答
热心网友
时间:2022-04-12 12:17
首先来看第一个decode函数,这个函数起基本语法是
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值);
并不能比较大小
这里可以在引入一个函数sign,sign是取数字符号的(select (-10) from al;返回的是-1)
小于零返回-1,等于0返回0,大于0返回1
我们可以修改下你这个语句为:
SELECT ENAME 姓名,
DECODE(SIGN(SAL-3000),1,(SAL*0.2),0,(SAL*0.2),-1,
DECODE(SIGN(SAL-2000),1,(SAL*0.15),0,(SAL*0.15),-1,
DECODE(SIGN(SAL-1000),1,(SAL*0.1),0,(SAL*0.1),-1,0)))应缴税款
from EMP;
再看第二个,这里要用case搜索函数
SELECT ENAME 姓名,
CASE
WHEN SAL<1000 THEN 0
WHEN SAL>=1000 AND SAL<2000 THEN SAL*0.1
WHEN SAL>=2000 AND SAL<3000 THEN SAL*0.15
ELSE SAL*0.2
END 应交税款
FROM EMP;
热心网友
时间:2022-04-12 13:35
1、SELECT Ename,
Decode(Sign(Sal - 1000), -1, 0,
Decode(Sign(Sal - 2000), -1, Sal * 0.1,
Decode(Sign(Sal - 3000), -1, Sal * 0.15, Sal * 0.2))), Sal
FROM Emp
2、SELECT Ename,
(CASE
WHEN Sal < 1000 THEN 0
WHEN Sal >= 1000 AND Sal < 2000 THEN Sal * 0.1
WHEN Sal >= 2000 AND Sal < 3000 THEN Sal * 0.15
ELSE Sal * 0.2
END),Sal
FROM Emp;
第一种写法的错误:DECODE用法错误,括号内应该是表达式、值、结果而不是列、判断列。
第二种写法的错误:格式应该是这样 CASE WHEN 表达式 THEN END,或是这样 CASE 表示式 WHEN 值 THEN 结果 END。