我的查询需要帮助:
当我向查询发送一个值为-1的参数时,我想用'IN'语句过滤,否则按照值进行过滤。
我试图做这样的事情:
WHERE (StatusId = CASE WHEN @StatusId = - 1
THEN
@StatusId IN (1, 2, 3)
ELSE
StatusId = @StatusId END)
感谢。
答案 0 :(得分: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)
答案 1 :(得分:1)
您不需要CASE
语句,只需使用WHERE
子句:
WHERE
(
@StatusId = -1 AND StatusId IN (1, 2, 3)
)
OR
(
StatusId = @StatusId AND @StatusId <> -1
)
答案 2 :(得分: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)