select * from reward where reward.status in (case  reward.works_user_id when 278 then 1+','+2 else 1+','+3 end);
status 是int类型,我想查询status in (1,2) or status in (1,3)
但是上面的SQL语句返回的结果有问题。请问怎么写这条SQL?

解决方案 »

  1.   

    换个思路select * from reward where reward.status in (1,2) and reward.works_user_id =278;
    union all
    select * from reward where reward.status in (3,4) and reward.works_user_id <>278;
      

  2.   

    1# 的方法很好,可以考虑一下把两个条件用or 连接一下。PS: works_user_id 列如果有 NULL 值,要注意一下。
      

  3.   

    select * from reward where (reward.status in (1,2) and reward.works_user_id =278);
    or (reward.status in (3,4) and reward.works_user_id <>278);
      

  4.   

    int型最好加个isnull(value,default)select * from reward where (isnull(reward.status,0) in (1,2) and isnull(reward.works_user_id,0) =278);
    or (isnull(reward.status,0) in (3,4) and isnull(reward.works_user_id,0) <>278)