2015-04-06 7 views
1

Я пытаюсь сделать этот запрос, где у меня есть где статья. Проблема в том, что мне нужно использовать внутри условия, где оператор IN, но я не могу вычислить то, что мне не хватает.Условие T-SQL в месте где

кто-то может дать руку pls?

вот мой запрос

DECLARE @OP INT = 1 
SELECT * FROM Table 
WHERE 
Table.[status] IN (CASE WHEN @OP = 1 THEN (5,6) ELSE (12) END) 
+0

Вы можете использовать такой случай [это] (http://stackoverflow.com/questions/10256848/can-i-use-case-statement- в-нарисуйте состояние/10260297 # 10260297). – HABO

ответ

6

Там нет необходимости в случае заявления.

DECLARE @OP INT = 1; 
SELECT * FROM Table 
WHERE (@OP = 1 AND Table.[status] IN (5,6)) 
OR (@OP !=1 AND Table.[status] IN (12)) 
+1

да. его работа .. большое спасибо – user2232273

+0

это выражение 'case', а не заявление – potashin

+0

Извините, я не очень хорош в условиях. – Stephan

3

Try:

DECLARE @OP INT = 1 
SELECT * FROM TABLE 
WHERE 
((@OP = 1 AND TABLE.[status] IN (5,6)) OR (@OP <> 1 AND TABLE.[status] = 12)) 
+0

приятно ... большое спасибо – user2232273

0

Другого варианта:

DECLARE @OP INT = 1 
SELECT * FROM Table 
WHERE 
1 = (CASE WHEN @OP = 1 CASE WHEN Table.[status] IN (5,6) THEN 1 END 
      ELSE CASE WHEN Table.[status] = 12 THEN 1 END 
    END) 

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

DECLARE @OP INT = 1 
SELECT * FROM Table 
WHERE 
1 = (CASE WHEN @OP = 1 AND Table.[status] IN (5,6) THEN 1 
      WHEN @OP <> 1 AND Table.[status] = 12 THEN 1 
    END) 
+0

Немного яснее, если вы включаете предложение 'ELSE' в выражения' CASE', чтобы явно предоставлять значение по умолчанию, например. нуль. В противном случае «NULL» будет возвращен, а некоторые люди не справятся или не сработают с нулями. – HABO

+0

да, возможно. Обычно я предпочитаю оставлять части «ELSE 0» в таких запросах, потому что это делает код более компактным (и я знаю, что NULL никогда не «равно» ни к чему). Другие могут найти, что это помогает сделать вещи более ясными. –

Смежные вопросы