Sql 带条件的WHERE子句
我想检查WHERE子句中的值 如何将这个伪SQL代码转换成真正的SQL代码 声明@includeReserved int=0-可以是0、1或2 挑选* 从票上 哪里 -如果@includeReserved=0: 票务保留=0 -否则,如果@includeReserved=1: ticketIsReserved=0或ticketIsReserved=1 -如果@includeReserved=2: 票务保留=1 使用和或: 您可能希望包括:Sql 带条件的WHERE子句,sql,sql-server,Sql,Sql Server,我想检查WHERE子句中的值 如何将这个伪SQL代码转换成真正的SQL代码 声明@includeReserved int=0-可以是0、1或2 挑选* 从票上 哪里 -如果@includeReserved=0: 票务保留=0 -否则,如果@includeReserved=1: ticketIsReserved=0或ticketIsReserved=1 -如果@includeReserved=2: 票务保留=1 使用和或: 您可能希望包括: or @includeReserved not in (
or @includeReserved not in (0, 1, 2)
如果您不想筛选其他值。请使用和或:
听起来你想要这样的逻辑:
select *
from Tickets
where
(@includeReserved = 0 and ticketIsReserved = 0) or
(@includeReserved = 1 and ticketIsReserved in (0, 1)) or
(@includeReserved = 2 and ticketIsReserved = 1);
尝试案例条件
declare @includeReserved int = 0 -- can be 0, 1 or 2
select *
from Tickets
where
case when (@includeReserved = 0 and ticketIsReserved = 0) then 1
when (@includeReserved = 1 and (ticketIsReserved = 0 or ticketIsReserved = 1)) then 1
when (@includeReserved = 2 and ticketIsReserved = 1) then end = 1
为什么?在WHERE子句中,您可以简单地使用AND和OR,如所有其他答案所示。
select *
from Tickets
where
(@includeReserved = 0 and ticketIsReserved = 0) or
(@includeReserved = 1 and ticketIsReserved in (0, 1)) or
(@includeReserved = 2 and ticketIsReserved = 1);
declare @includeReserved int = 0 -- can be 0, 1 or 2
select *
from Tickets
where
case when (@includeReserved = 0 and ticketIsReserved = 0) then 1
when (@includeReserved = 1 and (ticketIsReserved = 0 or ticketIsReserved = 1)) then 1
when (@includeReserved = 2 and ticketIsReserved = 1) then end = 1