高手留步,oracle中case语句可以用哪些语句来替换?加分阿!
CASE WHEN A IS NULL OR A <= B
THEN
B
WHEN B IS NULL OR A > B
THEN
A
ELSE
NULL
END
问题点数:100、回复次数:9Top
1 楼xiaoxiao1984(笨猫儿)回复于 2006-03-01 11:24:06 得分 0
可以被替换成
select decode(A,NULL,DECODE(B,NULL,NULL,B),DECODE(B,NULL,A,DECODE((SIGN(A-B)),-1,B,A))) from testTop
2 楼nbtoms(宾子寻月人)回复于 2006-03-01 13:09:51 得分 0
建议楼主看看decode()函数的使用方法。Top
3 楼boydgmx(授人以鱼不如授人以渔(baidu&google))回复于 2006-03-01 14:01:33 得分 0
不就是求最大值么:
DECODE(A,NULL,B,DECODE(B,NULL,A,GREATEST(A,B))Top
4 楼boydgmx(授人以鱼不如授人以渔(baidu&google))回复于 2006-03-01 14:01:59 得分 0
晕,少粘了一个括号:
DECODE(A,NULL,B,DECODE(B,NULL,A,GREATEST(A,B)))Top
5 楼bobfang(匆匆过客)回复于 2006-03-01 14:07:02 得分 0
greatest(nvl(A,B),nvl(B,A))Top
6 楼boydgmx(授人以鱼不如授人以渔(baidu&google))回复于 2006-03-01 14:21:34 得分 0
呵呵,bobfang 比我的更加精练!!
我是受了楼上的诱导,从decode的角度考虑
而 bobfang 应该是看到我的答案之后,才得出这种方法的吧。
总之,问题解决,有所得!Top
7 楼zlz_212(ShREk)回复于 2006-03-01 14:38:44 得分 0
还是你的意志不够坚定Top
8 楼boydgmx(授人以鱼不如授人以渔(baidu&google))回复于 2006-03-02 16:04:56 得分 0
再次仔细看了楼主的问题,发觉我们都有点离题了。
楼主的意思是 case 可以用什么语句来替换,而我们一心琢磨取最大值的问题了。
总结了一下:
在sql语句中,case 可以替换为decode
在plsql中,case 可以替换为 if then else end if; 这种判断语句。Top
9 楼qiaozhiwei(乔)回复于 2006-03-02 17:35:13 得分 0
if cond
...
elsif cond
...
elsif cond
...
end if;Top




