如果列A得值等于列B,返回A,否则返回B,可以使用DECODE函数
SELECT DECODE(A,B,A,B)
DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)ELSE
    RETURN(缺省值)
END IF
但是大于或小于时该函数不可以,可以自己写一个函数来实现

解决方案 »

  1.   

    SELECT ENAME, SAL,
       (CASE 
        WHEN HIREDATE < SYSDATE - TO_YMINTERVAL(’05-00’) THEN SAL * 1.25
                ELSE SAL * .9
           END ) AS NEW_SAL
         FROM EMP;
      

  2.   

    SQL> select decode(sign(3-2),1,3,-1,2,0) from dual;DECODE(SIGN(3-2),1,3,-1,2,0)
    ----------------------------
                               3SQL> select decode(sign(2-2),1,3,-1,2,0) from dual;DECODE(SIGN(2-2),1,3,-1,2,0)
    ----------------------------
                               0SQL> select decode(sign(1-2),1,3,-1,2,0) from dual;DECODE(SIGN(1-2),1,3,-1,2,0)
    ----------------------------
                               2
      

  3.   

    select case 
               when name1 > name2 then name1
               else name2 
           end as name 
    from tbok了!谢谢大家
      

  4.   

    decode + sign 或者case都能解决问题,不过对于这个问题来说,greatest 或者 least 函数最合适了
      

  5.   

    呵呵,greatest 就没人想的起来吗?