2014-09-25 2 views
0

Я пытаюсь написать логику для предложения where, которое по существу отфильтровывает два идентификатора на основе функции.Использование случая или IF в TSQL Где предложение?

Вот что я написал:

CASE 
     WHEN e.BOOLcolumn <> 1 
     THEN o.idType NOT IN ('G','C') 
     ELSE RETURN 
     END 

По какой-то причине я возвращаю ошибку на ДЕЛУ и NOT IN частей. Это делается в хранимой процедуре в предложении Where. Моя цель состоит в том, что если мое логическое значение истинно, то sproc должен работать как обычный, и если он является ложным, тогда ('G', 'C') не должно быть в нем.

Я супер новичок в этом, и Google не дал мне многого в отношении использования ... Я просто не знаю, как это сделать. Любая помощь будет оценена!

+0

Показать полное заявление sql, которое у вас есть. Трудно понять, что вам действительно нужно – zaratustra

ответ

0

Почему вы вообще используете CASE, если хотите просто «отфильтровать два идентификатора»?

WHERE e.column = 1 OR o.idType NOT IN ('G','C') 
+0

Поскольку эти идентификаторы должны быть отфильтрованы только в том случае, если мой e.column <> 1. – PapaNer

+0

Что e.column является логическим, и если оно ложно, тогда эти идентификаторы должны никуда не уходить , если это правда, они должны идти как нормальные. – PapaNer

+0

@PapaNer: взгляните на мой измененный ответ. Я включил 'column' check- –

1

Вот WHERE положения вы ищете:

WHERE e.BOOLcolumn = 1 
    OR o.idType NOT IN ('G', 'C') 

Надеется, что это поможет.

+0

Я думаю, что это не то, что хочет OP. Если я правильно понимаю его попытку, он хочет применить 'NOT IN ('G', 'C')' -check, только если 'e.column <> 1'. ** Изменить ** Хорошо, теперь вы использовали мой запрос;) –

+0

@TimSchmelter В этом случае с моим предложением проверка на 'idType' производится только в том случае, если' BOOLcolumn <> 1' –

+0

. Ваш запрос первоначально был: ' WHERE o.column <> 1 AND o.idType NOT IN ('G', 'C') '. Это не помогло, потому что оно не включало записи с 'o.column = 1'. –

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