Передача нескольких значений в предложении CASE - PullRequest
0 голосов
/ 30 августа 2018

У меня есть 3 набора статусов следующим образом:

  1. Активно, в процессе
  2. Одобрено, Отправлено
  3. Закрыто, отклонено

Я пытаюсь создать SQL-запрос и добавить предложение CASE в WHERE. Пока у меня есть следующее:

DECLARE @showFirstSetOfStatuses BIT = 1
DECLARE @showSecondSetOfStatuses BIT = 0
DECLARE @showThirdSetOfStatuses BIT = 0

SELECT RequestId, RequestName, RequestStatus
FROM SomeTable md
WHERE md.RequestStatus IN(CASE WHEN @showFirstSetOfStatuses = 1 THEN 'Active, In Process' 
                      WHEN @showSecondSetOfStatuses = 1 THEN 'Approved, Shipped' 
                      WHEN @showThirdSetOfStatuses = 1 THEN 'Closed, Rejected' END)

Это, конечно, не возвращает никакого результата, потому что он не соответствует статусам. Я не могу понять, как передать несколько значений в THEN части предложения CASE. Так что-то вроде

THEN 'Active', 'In Progress'
...

Может кто-нибудь сказать мне, как это сделать, или это невозможно?

1 Ответ

0 голосов
/ 30 августа 2018

Это то, что вы хотите?

SELECT RequestId, RequestName, RequestStatus
FROM SomeTable md
WHERE ( (@showFirstSetOfStatuses = 1 AND md.RequestStatus IN ('Active', 'In Process') ) OR
      ( (@showSecondSetOfStatuses = 1 AND md.RequestStatus IN ('Approved', 'Shipped') ) OR 
        (@showThirdSetOfStatuses = 1 AND md.RequestStatus IN ('Closed', 'Rejected') )
      );

Пища для размышления: я бы использовал один флаг, который принимает три значения, а не три разных флага:

DECLARE @showSetOfStatuses INT = 1;

SELECT RequestId, RequestName, RequestStatus
FROM SomeTable md
WHERE ( (@showSetOfStatuses = 1 AND md.RequestStatus IN ('Active', 'In Process') ) OR
      ( (@showSetOfStatuses = 2 AND md.RequestStatus IN ('Approved', 'Shipped') ) OR 
        (@showSetOfStatuses = 3 AND md.RequestStatus IN ('Closed', 'Rejected') )
      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...