帮助oracle case语句

时间:2011-07-19 22:47:57

标签: sql oracle case

到目前为止,我已将此case语句用于我基本上为结果赋值1或0的情况。 现在,我想调整一下并添加第二列(日期信息)。

现在是工作案例陈述:

select 
     case when count(*) = 0 then 1 else 0 end result 
from Table1 
where 
   to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1;

结果是:

RESULT
----------
     0

现在,我希望在同一结果集中获得相同的日期信息(to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1)

有没有办法一次通过?结果我想得到:

MYDT     RESULT
------   ---------
18-JUL-11      0

2 个答案:

答案 0 :(得分:3)

根据您的数据,有两种方法可以执行此操作。

例如,如果您可以为日期设置多个值,但总是希望计数为*,则可以

With Totalcount as  (select 
     case when count(*) = 0 then 1 else 0 end result 
from Table1 
where 
   to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1) 

SELECT DISTINCT   
       to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') MYDT,
        totalcount.result
FROM 
     Table1 , Totalcount 
where 
   to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1

但是,如果您想按日期计算,则需要

select 
     to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') as mydt,
     case when count(*) = 0 then 1 else 0 end result
from Table1 
where 
   to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1
GROUP BY 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD')

答案 1 :(得分:0)

select 
     to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') as mydt,
     case when count(*) = 0 then 1 else 0 end result
from Table1 
where 
   to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1;