有一个表tmp,传入参数为@flag如果@flag=0 则返回表中的所有记录
如果@flag=1 则返回表中字段a=1的记录
如果@flag=2 则返回表中字段a<>1的记录
能不能直接写在where语句中呢? 

解决方案 »

  1.   

    try
    select *
    from tmp
    where a=case when @flag=0 then a  when @flag=1 then 1 end
    or a!=case when @flag=2 then 0 end
      

  2.   

    begin
    if(@flag=0)
    select * from tmp
    if(@flag=1)
    select * from tmp where a=1
    if(@flag<>1)
    select * from tmp where a<>1
    end
      

  3.   

    是只返回字段 a吗??
    那可以用select
     *
    from
     tmp
    where
     case when @flag=0 then a  
          when @flag=1 then 1 end
     or 
          a!=case when @flag=2 then 0 end as a
      

  4.   


    or a!=case when @flag=2 then 0 end  应该是
    or a!=case when @flag=2 then 1 end  吧
      

  5.   

    这样做的结果是正确的,但是我不想通过这种方式来实现,应为中间的处理语句很多,这样的话重复的代码就太多了.想通过where给实现
      

  6.   

    SELECT *
    FROM   TMP
    WHERE  a = CASE @f WHEN 0 THEN a WHEN 1 THEN 1 END 
           OR  a != CASE @f WHEN 2 THEN 1 END 
      

  7.   

    begin
    if (@flag=0)
    select * from tmp
    if (@flag=1)
    select * from tmp where a=1
    if( @flag=2)
    select * from tmp where a<>1
    end
      

  8.   

    还有另外一种方法了:
    select * from 
    tmp
    case when @flag=0 then a
         when @flag=1 then 1 end
    or a!=case when @flag=2 then 0 end