SQL 服务器上带有 IN 的 WHERE 子句内的 CASE 语法

CASE syntax inside a WHERE clause with IN on SQL Server

如何使以下查询有效?这是在存储过程 @GetClosedMeetings bit 中传递的参数 true 以获取已完成的会议,否则获取计划会议和当前会议。 (状态:0 - 计划中,1 - 当前,2 - 关闭)

SELECT 
    MeetingId, Status
FROM 
    dbo.Meeting
WHERE 
    Status IN  (CASE 
                   WHEN @GetClosedMeetings = 1 THEN 1 
                   ELSE @OtherStatuses)

你错过了结尾以防万一

SELECT MeetingId, Status
FROM dbo.Meeting
WHERE Status IN 
(CASE 
 WHEN @GetClosedMeetings = 1 THEN 1 
 ELSE @OtherStatuses end)

如果我对你的要求理解正确的话,如果@GetClosedMeetingsTRUE,你想要returnMeetings就完事了,从你的问题来看似乎有一个STATUS,共 2 个。另一方面,如果 @GetClosedMeetingsFALSE,那么您想要获得计划的和当前的会议。这是实现此目的的一种方法:

SELECT MeetingId, Status
FROM dbo.Meeting
WHERE
    (@GetClosedMeetings = 1 AND Status = 2)
    OR (@GetClosedMeetings = 0 AND Status IN(0, 1))

使用这个:

SELECT MeetingId, Status
FROM dbo.Meeting
WHERE (Status = 1 And @GetClosedMeetings = 1)
Or (Status <> 1 And @GetClosedMeetings <> 1 )