Sql 带条件的WHERE子句

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 (

我想检查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 (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