在SQL Server上使用IN的WHERE子句中的CASE语法

时间:2015-04-17 05:50:05

标签: sql sql-server case

如何进行以下查询工作?这是内部存储过程@GetClosedMeetings bit参数传递为true以获得已完成的会议,否则将获得计划和当前会议。 (状态:0 - 计划,1 - 当前,2 - 关闭)

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

3 个答案:

答案 0 :(得分:3)

如果我正确理解您的要求,如果@GetClosedMeetingsTRUE,您希望返回已完成的Meetings,您的问题似乎有STATUS 2.另一方面,如果@GetClosedMeetingsFALSE,那么您希望获得计划和当前会议。以下是实现此目的的一种方法:

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

答案 1 :(得分:1)

使用它:

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

答案 2 :(得分:0)

你错过了案件

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