不好意思,因为有少少问题,所以重发一次提问,第一次在论坛发贴是这样的了
SQL server语句是:
SELECT  CheckFlag=case when NowUnit<>MAdmPeo.PeoUnit And NowUnit is not Null And datediff(minute,endtime,getdate())>0 then '超假外出' when NowUnit<>MAdmPeo.PeoUnit And NowUnit is not Null then '外出' end,  ViewPassCurrList.NowUnit,ViewPassCurrList.OutWhy
FROM  MAdmPeo LEFT OUTER 
JOIN 
ViewPassCurrList ON ViewPassCurrList.PeoNo = MAdmPeo.PeoNo
其中MAdmPeo为表,ViewpassCurrList为视图
我想转换为oracle
请问这个句子里的case when、datediff()函数、getdate()函数、"<>"号和is not null这些怎样修改啊?请各位oracle高手能指点下小弟,关系到小弟的泡妞问题啊!因为没工作就没钱,没钱就没妞泡啊,各位,一定要帮忙啊,谢谢!

解决方案 »

  1.   

    SELECT 
    (case
    when NowUnit<>MAdmPeo.PeoUnit And NowUnit is not Null And 
    sysdate -endtime>0 then '超假外出'  --这个语意好象有问题,
    when NowUnit<>MAdmPeo.PeoUnit And NowUnit is not Null then '外出' end )CheckFlag,  ViewPassCurrList.NowUnit,ViewPassCurrList.OutWhy
    FROM  MAdmPeo LEFT OUTER 
    JOIN 
    ViewPassCurrList ON ViewPassCurrList.PeoNo = MAdmPeo.PeoNo
      

  2.   

    这个问题困扰我很久了,今天看到welyngj的回复我非常开心,非常感谢谢welyngj.但那个语句我还想要解决的就是sysdate-endtime>0,因为我想得到sysdate-endtime的值为分钟,而你回复的是天数啊,怎样修改呢,是不是to_number(sysdate -endtime)*24*60>0,但sysdate -endtime得出的值有0.5天或者0.32天的吗?很急!!!
      

  3.   

    你试一下不就知道了吗?
    我测试了一下。
    用trunc((sysdate -endtime)*24*60)>0
      

  4.   


    select decode(sign(NowUnit-MAdmPeo.PeoUnit),0,decode(NowUnit,null,0,decode(sign(sysdate-endtime),1,'超假外出','外出')),ViewPassCurrList.NowUnit,ViewPassCurrList.OutWhy
    FROM  MAdmPeo,ViewPassCurrList 
    where ViewPassCurrList.PeoNo(+) = MAdmPeo.PeoNo
      

  5.   

    贝吉汉波波的方法果然非常好,只不过是语法上写漏少少字符,在“decode(sign(NowUnit-MAdmPeo.PeoUnit),0,decode(NowUnit,null,0,decode(sign(sysdate-endtime),1,'超假外出','外出'))”语句中最后缺少了一个右括号,并且加上一个"as CheckFlag"那才是最完美的句子了,在from到最后的where好似唔得,我将之前我的from到where的句子代替过去,终于可以用到了,welyngj(平平淡淡)的也不错,各有千秋,只不过你说trunc((sysdate -endtime)*24*60)>0用这个来测试,我觉得TRUNC(N,M)函数是用来“得到在M位截斷的N的值”,以你所说我唔知点用。总的来说非常感谢两位对我的热心帮助,也非常感谢谢呢个论坛,I like!结贴了!