我有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'
...
有人可以告诉我该怎么做还是不可能?
答案 0 :(得分:2)
这是您想要的吗?
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') )
);