Переключить регистр в T-SQL в предложении where - PullRequest
1 голос
/ 21 февраля 2011

Почему это не работает?Пожалуйста, помогите.

SELECT X 
FROM Y
WHERE Z >= 5
  AND A IN (CASE @someParameter when 1 THEN (5) ELSE (4,5) END)

Где работает, как показано ниже

SELECT X 
FROM Y
WHERE Z >= 5
  AND A = (CASE @someParameter when 1 THEN 5 ELSE 4 END)

Ответы [ 4 ]

2 голосов
/ 21 февраля 2011

Вы можете сделать это без case, например:

WHERE Z >= 5
  AND (
      @SomeParameter = 1 AND A = 5
      OR 
      @SomeParameter <> 1 AND A IN (4,5)
      )
1 голос
/ 21 февраля 2011

Вы можете выбрать оператор вместо прямого упоминания чисел.Я не пытался выполнить это.Но идея состоит в том, чтобы получить требуемый набор чисел, используя запрос выбора внутри скобок.

SELECT X  
FROM Y 
WHERE Z >= 5   
AND A IN (CASE @someParameter when 1 THEN (SELECT 4) ELSE (SELECT 4 UNION SELECT 5) END)
0 голосов
/ 21 февраля 2011
SELECT X 
FROM Y
WHERE Z >= 5
  AND 
  CASE @someParameter 
  when 1 THEN A = 5 
  ELSE (A = 4 OR A = 5)
  END

Примечание: я не пробовал этот синтаксис. Я предполагаю, что это должно работать.

0 голосов
/ 21 февраля 2011

Вы не можете вернуть set , диапазон или таблицу (или что-либо еще, что вы хотите вызвать несколькими значениями) из оператора CASE.Это выражение (4,5) недопустимо.Вместо этого я советую создавать эти значения в виде небольшой справочной таблицы, из которой вы можете выбирать.

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