SQL 服务器:where 语句中的条件使用列作为条件
SQL Server : conditional in where statement using colunm as a condition
如何在使用不同条件列的 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 不为空,则查询将基于 GroupID
- 否则,如果@Eoid 不为空,则查询将基于 Eoid 生成
- 否则如果 GroupID 和 Eoid 都为空则 select 所有记录
注意这是我程序的条件
- groupid和eoid可以同时为null
- groupid或eoid只能有一个值
- 如果 groupid 有值则 eoid 为空
- 如果 eoid 有值则 groupid 为空
- groupid 不能同时有值。 then 中的任何一个都只有一个值
是否可以使用 SQL 查询?
只需使用常规布尔逻辑:
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
比较实际上是多余的。
这里不用写CASE
WHEN
,直接把你的WHERE
改成
就可以了
where (@GroupID IS NULL OR a.groupid = @GroupID) AND (@Eoid IS NULL OR a.eoid=@Eoid)
如果 @GroupID
和 @Eoid
都是 NULL
,那么您将通过这种方式获取所有记录,如果指定,它将匹配具有相应 ID 的记录。
这实际上可以通过以下方式完成:
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)))
如何在使用不同条件列的 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 不为空,则查询将基于 GroupID
- 否则,如果@Eoid 不为空,则查询将基于 Eoid 生成
- 否则如果 GroupID 和 Eoid 都为空则 select 所有记录
注意这是我程序的条件
- groupid和eoid可以同时为null
- groupid或eoid只能有一个值
- 如果 groupid 有值则 eoid 为空
- 如果 eoid 有值则 groupid 为空
- groupid 不能同时有值。 then 中的任何一个都只有一个值
是否可以使用 SQL 查询?
只需使用常规布尔逻辑:
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
比较实际上是多余的。
这里不用写CASE
WHEN
,直接把你的WHERE
改成
where (@GroupID IS NULL OR a.groupid = @GroupID) AND (@Eoid IS NULL OR a.eoid=@Eoid)
如果 @GroupID
和 @Eoid
都是 NULL
,那么您将通过这种方式获取所有记录,如果指定,它将匹配具有相应 ID 的记录。
这实际上可以通过以下方式完成:
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)))