0

我的查询需要帮助:

当我向查询发送值为 -1 的参数时,我想使用“IN”语句进行过滤,否则根据该值进行过滤。

我试图做这样的事情:

WHERE  (StatusId = CASE WHEN @StatusId = - 1 
        THEN 
        @StatusId IN (1, 2, 3) 
        ELSE 
        StatusId = @StatusId  END)

谢谢。

4

3 回答 3

1

我认为您的示例中有错字,如下所示:

WHEN @StatusId = - 1 THEN  @StatusId IN (1, 2, 3)  

...不会做任何事情,因为如果@StatusId = -1,它不会in (1, 2, 3)

Anywhos,您可以使用OR嵌套括号:

WHERE  (StatusId IN (1, 2, 3)  AND @StatusId = -1)
        OR (StatusId = @StatusId AND @StatusId <> -1)
于 2012-09-11T14:28:14.657 回答
1

您不需要CASE为此声明,您只需使用一个WHERE子句:

WHERE 
(
    @StatusId = -1 AND StatusId IN (1, 2, 3) 
) 
OR
(
    StatusId = @StatusId AND @StatusId <> -1
) 
于 2012-09-11T14:29:03.633 回答
1

无需使用CASE. 你可以直接这样做:

WHERE 
(@StatusId = -1 AND StatusId IN (1, 2, 3) ) 
OR
(StatusId = @StatusId AND @StatusId <> -1) 

或者,如果您想使用CASE,可以这样做:

WHERE StatusId IN 
(CASE @StatusId 
 WHEN -1 THEN 1,2,3 
 ELSE @StatusId 
END)
于 2012-09-11T14:29:14.820 回答