如何使用不同的条件列在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
这些是我的过滤条件
请注意,这是我的程序的条件
这可以使用SQL查询吗?
答案 0 :(得分:2)
您无需在此处撰写CASE
WHEN
,只需将WHERE
更改为
where (@GroupID IS NULL OR a.groupid = @GroupID) AND (@Eoid IS NULL OR a.eoid=@Eoid)
通过这种方式,如果@GroupID
和& @Eoid
为NULL
,如果已指定,则会将记录与相应的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)))