Оператор case в выражении where не подходит и не имеет значения - PullRequest
0 голосов
/ 14 декабря 2018

Я извлекаю данные из существующей таблицы, используя хранимую процедуру, в которой есть варианты выбора «да» или «нет», которые пользователь выбирает во внешней части через флажок.Я хочу ограничить написание множества различных If утверждений для каждого выбора, который они делают.

Эта часть моего предложения where работает.Данные для этого столбца: Y или N.

Where... and IsSigned = Case When @IncludeSigned = 'Y' then IsSigned else 'N' end

Я бы хотел добавить туда, где используются is not null и not like, если это возможно междуквадратные скобки.Пока у меня есть

and SignatureType = case when @IncludeElectronic = 'Y' then Type else [NOT like electronic] end

также

and ReviewDate = Case When @HasReviewDate = 'Y' then [ReviewDate is not null] else null end

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Это может помочь вам использовать И / ИЛИ вместо регистра

where (ReviewDate is not null or @HasReviewDate = 'Y' ) And (....)

, т. Е. Когда @HasReviewDate = 'Y' запрос вернет записи с ReviewDate, не равным нулю, и когда @HasReviewDate! = 'Y'тогда запрос вернет записи с ReviewDate равно нулю

0 голосов
/ 14 декабря 2018

думайте об этом так: -

Ваш первый оператор case имеет два возможных результата: -

IsSigned = 'Y'
IsSigned = 'N'

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

SignatureType = Type
SignatureType = [НЕ как электронный]

и ваш третий:

ReviewDate = [ReviewDate не является нулевым]
ReviewDate = null end

SO оператор должен быть перед оператором case и применяться ко всем результатам оператора case.

Например,

ГДЕ myfield не похоже на CASE, КОГДА это поле = 1 THEN 'Fish' ELSE 'Фишки END

даст либо

myfield не похоже на 'Fish'

myfield не похоже на 'Chips'

0 голосов
/ 14 декабря 2018

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

...