SQL где предложение с оператором case - PullRequest
1 голос
/ 02 июня 2011

У меня проблема с SQL, но я пока не нашел решения, которое я пытаюсь сделать, это предложение where для процедуры, где переменная userID может содержать либо действительный userID, либо -1, чтобы указать всех пользователей.

Однако я застрял в этой части предложения where:

AND usertable.userid = CASE WHEN @user = -1
THEN

ELSE
  @user
END

Я не уверен, как обработать -1, чтобы сказать, выбрать всех пользователей

Спасибо

Ответы [ 4 ]

5 голосов
/ 02 июня 2011

вы можете изменить предложение таким образом, чтобы вернуть всех пользователей ...

AND ( @user = -1 
    OR usertable.userid = @user
)

Таким образом, нет необходимости указывать регистр ...

5 голосов
/ 02 июня 2011

Возможно, сработает следующее:

SELECT whatever
  FROM wherever
  WHERE something = somethingelse AND
        usertable.userid = CASE @user
                             WHEN -1 THEN usertable.userid
                             ELSE @user
                           END

Делись и наслаждайся.

1 голос
/ 02 июня 2011
usertable.userid = COALESCE(NULLIF(@user, -1), usertable.userid)
1 голос
/ 02 июня 2011

Не могли бы вы выразить всю мысль в выражении if ...

Что-то вроде

if (@userId = -1)
    SELECT * FROM usertable
else
    SELECT * FROM usertable WHERE Id = @userId
...