CASE WHEN A IS NULL OR A <= B 
     THEN
          B
     WHEN B IS NULL OR A > B 
     THEN
          A
     ELSE
  NULL
END

解决方案 »

  1.   


    可以被替换成
    select decode(A,NULL,DECODE(B,NULL,NULL,B),DECODE(B,NULL,A,DECODE((SIGN(A-B)),-1,B,A))) from test
      

  2.   

    建议楼主看看decode()函数的使用方法。
      

  3.   

    不就是求最大值么:DECODE(A,NULL,B,DECODE(B,NULL,A,GREATEST(A,B))
      

  4.   

    晕,少粘了一个括号:DECODE(A,NULL,B,DECODE(B,NULL,A,GREATEST(A,B)))
      

  5.   

    呵呵,bobfang 比我的更加精练!!我是受了楼上的诱导,从decode的角度考虑而 bobfang 应该是看到我的答案之后,才得出这种方法的吧。总之,问题解决,有所得!
      

  6.   

    再次仔细看了楼主的问题,发觉我们都有点离题了。楼主的意思是 case 可以用什么语句来替换,而我们一心琢磨取最大值的问题了。总结了一下:在sql语句中,case 可以替换为decode在plsql中,case 可以替换为 if then else end if; 这种判断语句。
      

  7.   

    if cond
    ... 
    elsif cond
    ...
    elsif cond
    ...
    end if;