select * from cms_con_duebill a
where 1=1
and (case when 1=1 then 
 case  a.duebillid='1'
  else 1=1 end);
  这个不行啊 我就想where 后面加case语句

解决方案 »

  1.   

    select * from dual where 1=1 and 1=(case when 1=1 then 1 else 2 end);select * from cms_con_duebill a
    where 1=1
    and a.duebillid = (case when 1=1 then '1' else '0' end) ;
      

  2.   

    and (case when 1=1 then  
     case a.duebillid='1'
      else 1=1 end);2个CASE,一个END?结束的是哪个CASE?是不是语法有问题>
      

  3.   

    1、首先case是一个函数而非语句。
    2、case既是函数,所以只能以表达式方式调用。
      

  4.   

    不行啊 你看     vCondition:=vCondition||' and case when  :pCustomerName is not null then
                                               like ''%''||:pCustomerName||''%''
                                      else then 1=1 end' ;
    这个怎么整 有 like 语句的
      

  5.   

    3、case ... end case语句只存在pl/sql块或过程(存储过程、函数、触发器等)中。
      

  6.   

    瞎说
    CASE WHEN是标准SQL语法,可以用在SQL语句里,并且只要遵循标准SQL语法的数据库就能通用
    DECODE是ORACLE自己的函数,只适用于ORACLE
    如一楼就行了
      

  7.   


    case when以及decode也是不行的,因为 多值判断函数是函数,不是表达式,它只能以表达式的方式调用,而且不能以判断条件的方式调用。也就是在单条sql语句中,case when以及decode函数只能出现select 和 from tablename之间,不能出现在where或者on后面。
      

  8.   

    我用了好多次在WHERE好吧,请实际用过后再说话
    我们经常这样用的select
    from a
    where 
    a.id=decode(:in_id,0,a.id,:in_id)
    表示传进去的参数是0的话,则是查全部纪录,否则是指定值
    也可以用CASE whena.id= 
    case 
    when :in_id=0 
    then a.id 
    else :in_id
    end 
    效果是一样
    可以看出DECODE简洁,但不是通用SQL
    另外DECODE不支持OR AND 条件 如:in_id=0 or :in_id=999999,当然也是可以实现,就是一个个判断
    另外DECODE不支持>,<等等
    只能通过列多个选项,或者通过SIGN函数来实现