【问题标题】:help with oracle case statement帮助 oracle case 语句
【发布时间】:2011-07-19 22:47:56
【问题描述】:

到目前为止,我的 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

【问题讨论】:

    标签: sql oracle case


    【解决方案1】:

    根据您的数据,有几种方法可以做到这一点。

    例如,如果您可以有多个日期值,但总是希望计数 *,您可以这样做

    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')
    

    【讨论】:

    • 谢谢。第二个成功了。感谢您澄清这一点。是的,基本上是想看看前一天的数据是否存在,这就是我计数的原因。
    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2011-09-15
      • 2011-11-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多