1

我想在 where 子句中使用 CASE 和 IN 子句

  • 当 User Status = 1 时,CASE 应该返回 1
  • 当 User Status = 2 时,CASE 应该返回 2
  • 当 User Status = 3 时,CASE 应该返回 3
  • 当 User.Status = NULL 时,它应该显示所有状态为 1、2 和 3 的用户

但是下面的查询引发了语法错误。

询问:

SELECT *
FROM User
where isInternalUser = 0 and DeleteMark <> 1 and
User.Status IN 
(
   CASE @UserStatus          // case for UserStatus
       WHEN 0 THEN 0
       WHEN 1 THEN 1
       WHEN 2 THEN 2
       ELSE (0,1,2)           
    END                      
)

谁能帮帮我..

谢谢,阿尼什

4

2 回答 2

1

尝试不使用该CASE语句,但检查是否@UserStatus IS NULL

SELECT *
FROM User
WHERE isInternalUser = 0 AND DeleteMark <> 1 AND (
    (@UserStatus IS NOT NULL AND Status = @UserStatus)
    OR (@UserStatus IS NULL AND Status IN (0, 1, 2))
)
于 2012-06-13T07:14:27.417 回答
0
User.Status IN 
(
    SELECT s FROM (
        SELECT 1 s union SELECT 2 s union SELECT 3 s
    ) a
    WHERE @UserStatus is null or @UserStatus = s
)
于 2012-06-13T06:51:00.860 回答