SQL Server:条件在where语句中使用colunm作为条件

时间:2018-03-08 04:26:08

标签: sql sql-server sql-server-2005

如何使用不同的条件列在where子句中使用条件案例?

请参阅以下代码

if OBJECT_ID('tempdb..#MemberInfo') is not null
drop table #MemberInfo  

DECLARE @GroupID varchar(60),
@Eoid varchar(60);

set @GroupID='23'    
set @Eoid = null;

select a.memberid, a.membername, a.groupid, a.eoid
from membermst a 
where
    case 
       when @GroupID is not null 
          then a.groupid = @GroupID // this is an error
       when @Eoid is not null 
          then a.eoid = @Eoid // this is an error    
       when @GroupID is null and @Eoid is null 
          then select all records // this is an error
end 

这些是我的过滤条件

  • 如果@GroupID不为null,则查询将基于GroupID
  • 生成
  • 如果@Eoid为非null,则查询将基于Eoid
  • 生成
  • 如果GroupID和Eoid都为null,则选择所有记录

请注意,这是我的程序的条件

  1. groupid和eoid可以同时为null
  2. groupid或eoid只能有值
  3. 如果groupid有值,那么eoid为null
  4. 如果eoid有值,则groupid为null
  5. groupid并且不能同时拥有值。其中一个只有一个值
  6. 这可以使用SQL查询吗?

3 个答案:

答案 0 :(得分:2)

您无需在此处撰写CASE WHEN,只需将WHERE更改为

即可
where (@GroupID IS NULL OR a.groupid = @GroupID) AND (@Eoid IS NULL OR a.eoid=@Eoid)

通过这种方式,如果@GroupID和& @EoidNULL,如果已指定,则会将记录与相应的ID匹配。

答案 1 :(得分:1)

只需使用常规布尔逻辑:

select m.memberid, m.membername, m.groupid, m.eoid
from membermst m
where (@GroupID is not null and a.groupid = @GroupID) or
      (@GroupID is null and @Eoid is not null and a.eoid = @Eoid) or
      (@GroupID is null and @Eoid is null)

这实际上可以简化为:

select m.memberid, m.membername, m.groupid, m.eoid
from membermst m
where (a.groupid = @GroupID) or
      (@GroupID is null and a.eoid = @Eoid) or
      (@GroupID is null and @Eoid is null)

is not null比较实际上是多余的。

答案 2 :(得分:0)

这实际上可以通过以下方式完成:

select a.memberid, a.membername, a.groupid, a.eoid
    from membermst a 
    where    
    ((@GroupID is null)or((@GroupID is not null)and (a.groupid = @GroupID)))