我的查询需要帮助:
当我向查询发送值为 -1 的参数时,我想使用“IN”语句进行过滤,否则根据该值进行过滤。
我试图做这样的事情:
WHERE (StatusId = CASE WHEN @StatusId = - 1
THEN
@StatusId IN (1, 2, 3)
ELSE
StatusId = @StatusId END)
谢谢。
我的查询需要帮助:
当我向查询发送值为 -1 的参数时,我想使用“IN”语句进行过滤,否则根据该值进行过滤。
我试图做这样的事情:
WHERE (StatusId = CASE WHEN @StatusId = - 1
THEN
@StatusId IN (1, 2, 3)
ELSE
StatusId = @StatusId END)
谢谢。
我认为您的示例中有错字,如下所示:
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)
您不需要CASE
为此声明,您只需使用一个WHERE
子句:
WHERE
(
@StatusId = -1 AND StatusId IN (1, 2, 3)
)
OR
(
StatusId = @StatusId AND @StatusId <> -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)