带条件的WHERE子句

时间:2019-08-05 13:23:12

标签: sql sql-server

我想检查WHERE子句中的值。

如何将这个伪代码转换为真实的SQL代码?

declare @includeReserved int = 0 -- can be 0, 1 or 2

select *
from Tickets
where
(
    -- if @includeReserved = 0:
    ticketIsReserved = 0
    -- else if @includeReserved = 1:
    ticketIsReserved = 0 or ticketIsReserved = 1
    -- else if @includeReserved = 2:
    ticketIsReserved = 1
)

4 个答案:

答案 0 :(得分:2)

使用andor

where (@includeReserved = 0 and ticketIsReserved = 0) or
      (@includeReserved = 1 and ticketIsReserved in (0, 1)) or             
      (@includeReserved = 2 and ticketIsReserved = 1)

您可能要包括:

or @includeReserved not in (0, 1, 2)

如果您根本不想过滤其他值。

答案 1 :(得分:2)

尝试案例条件...

merge

答案 2 :(得分:0)

使用ANDOR

select *
from Tickets
where
(
  (@includeReserved = 0 and ticketIsReserved = 0)
  or    
  (@includeReserved = 1 and ticketIsReserved in (0,1))
  or
  (@includeReserved = 2 and ticketIsReserved = 1)
)

答案 3 :(得分:0)

听起来您想要这种逻辑:

select *
from Tickets
where
    (@includeReserved = 0 and ticketIsReserved = 0) or
    (@includeReserved = 1 and ticketIsReserved in (0, 1)) or
    (@includeReserved = 2 and ticketIsReserved = 1);