SQL Server: в ... случае ... в предложении WHERE - PullRequest
0 голосов
/ 11 августа 2010

Мне нужно закодировать запрос для чего-то вроде этого:

Select [something]
Where
condition in
case
when (if another_condition = A and 3rd Condition = B) then (C,D)
when (if another_condition = N and 3rd Condition = E) then (F,G)
else (J,K)
end

По сути, я хочу, чтобы при выполнении A и B условия могли быть установлены на C или D, если N илиЕсли выполнены E, тогда условие может быть установлено на F или G, иначе условие будет установлено на J или K. Однако, когда я запускаю это, я продолжаю получать неверный синтаксис рядом с ключевым словом «Case».

Пожалуйста, помогите!Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

Может быть, это:

Where  (Another_Condition = 'A' And Third_Condition = 'B' And Condition in ('C','D'))
       Or 
       (Another_Condition = 'N' and Third_Condition = 'E' And Condition in ('F','G'))
       Or 
       Condition In ('J','K')

Будьте очень осторожны с микшированием, а также и или в предложении where. Скобки важны.

1 голос
/ 11 августа 2010

Я бы, вероятно, согласился с подходом G Mastro, заключающимся в расширении запроса в виде логического выражения.Хотя подход с вложенными запросами будет работать, смысл кода менее очевиден для IMO.

Сказав, что, если в вашем выражении CASE много случаев, вы можете рассмотреть возможность изменения ваших данных, посколькунезависимо от того, как вы пишете запрос, он сводится к большому логическому выражению.

1 голос
/ 11 августа 2010

Как насчет этого - подзапрос UNION выдаст вам полный набор результатов в подзапросе.Затем вы можете сказать «ГДЕ условие IN» (подзапрос).Как это:

SELECT [something]
WHERE
condition IN
(SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN C
   WHEN (another_condition = N AND 3rd Condition = E) THEN F
   ELSE J
   END AS Value

UNION

SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN D
   WHEN (another_condition = N AND 3rd Condition = E) THEN G
   ELSE K
   END AS Value
)
...