使用计数条件帮助oracle sql case语句

时间:2011-07-21 14:20:28

标签: sql oracle case

到目前为止,此查询使用exists:

SELECT CASE WHEN EXISTS
                   ( SELECT *
                     FROM TEST1
                     WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000'
                   )
            THEN 0
            ELSE 1
       END AS FLG
FROM dual

现在,我需要添加另一个标准。 由于我的数据的这些一致计数值为100,例如:

SQL> select count(*), timestamp from TEST1 group by timestamp order by 2 desc;

  COUNT(*)  TIMESTAMP
---------- ----------
      100 2.0111E+11
      100 2.0111E+11

我现在需要更改此查询,以便我只获得那些计数(*)为100的查询 如果他们这样做,那么设置我的标志= 0,如果没有设置我的标志= 1。

我不确定将此计数标准值添加到100的位置。我仍然可以使用CASE吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试查看having - 声明:

select count(*), timestamp
from TEST1
group by timestamp
having count(*) = 100

基本上它与where相同,但仅适用于聚合。

答案 1 :(得分:0)

像这样的东西

SELECT CASE WHEN EXISTS( SELECT *
                 FROM TEST1
                 WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000'
               ) 
            and 
               DECODE(( SELECT count(*)
                 FROM TEST1
                 WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000'
               ),100,true,false)
        THEN 0
        ELSE 1
   END AS FLG
FROM dual