SQL> select count(*) from t where 1=1;  COUNT(*)
----------
         0已用时间:  00: 00: 00.10
SQL> select decode(count(*),0,1,count(*)) from t where 1=1;DECODE(COUNT(*),0,1,COUNT(*))
-----------------------------
                            1已用时间:  00: 00: 00.10
SQL>

解决方案 »

  1.   

    但是
    select decode(count(*),0,1,count(*)) from t where 1=2;
    这种条件不成立的情况,它也是返回1啊,达不到我的要求
      

  2.   

    select count(*) from a where ('S'='S') and (字段=某个值) 这样就可以得到你要的值了,
    为什么要用or 呢?
      

  3.   

    这些是逻辑运算,建议楼主好好分析一下你想打到的效果,将条件列出来,找好逻辑运算符,适当运用decode,如果还是结果出不来,建议用存储过程写.肯定会达到你要的效果
      

  4.   

    具体为什么这样,是因为整个 where 后面的语句,都不是写死在程序里的,而是配置在一个工作流模型中,所以它有可能是or 也有可能是 and ,只有是oracle的语法,都有可能,所以才这么复杂。原来是想自已写一个语法分析器的,后来想省点力气,才丢给oracle去解决。可喜的是我已经找到解决方法了,产生这个问题的根本原因就是a为空的情况,所以我构造了一个不为空的情况,建了一张临时表 T,然后左关联一下,这样至少会一条记录存在select count(*) from (select * from T,A where T.字段=A.字段(+)) where ('S'='S') or (字段=某个值)   当然,先决条件是表A有一个固定的字段名
    还是很感谢大家!
      

  5.   

    不知道是不是要这样
    t表没记录
    select decode('s','s',1,count(*)) from t where 字段=某个值
    1
    select decode('s','k',1,count(*)) from t where 字段=某个值
    0
    t表有n条记录
    select decode('s','s',1,count(*)) from t where 字段=某个值
    1
    select decode('s','k',1,count(*)) from t where 字段=某个值
    n
      

  6.   

    用nvl函数
    select nvl(count(*),1) from a where ('S'='S')
      

  7.   

    楼上的,count(*)会为null吗???
      

  8.   

    ('S'='S') or (字段=某个值)这样是不会参数NULL值的