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)
如果我对你的要求理解正确的话,如果@GetClosedMeetings
是TRUE
,你想要returnMeetings
就完事了,从你的问题来看似乎有一个STATUS
,共 2 个。另一方面,如果 @GetClosedMeetings
是 FALSE
,那么您想要获得计划的和当前的会议。这是实现此目的的一种方法:
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 )
如何使以下查询有效?这是在存储过程 @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)
如果我对你的要求理解正确的话,如果@GetClosedMeetings
是TRUE
,你想要returnMeetings
就完事了,从你的问题来看似乎有一个STATUS
,共 2 个。另一方面,如果 @GetClosedMeetings
是 FALSE
,那么您想要获得计划的和当前的会议。这是实现此目的的一种方法:
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 )