Добавление CASE WHEN в WHERE - PullRequest
0 голосов
/ 01 ноября 2018

Я использовал следующее WHERE предложение

WHERE (TYPE1 = :P3_ITEM1 OR :P3_ITEM1 IS NULL)

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

Теперь мне нужно добавить еще два фильтра для TYPE2 и TYPE3. Обычно только один элемент страницы P3_ITEM1, P3_ITEM2 или P3_ITEM3 не равен нулю, поэтому мне нужно отфильтровать все, что не равно нулю.

Я пытался

WHERE (TYPE1=:P3_ITEM1 OR :P3_ITEM1 IS NULL) OR
  (TYPE2=:P3_ITEM2 OR :P3_ITEM2 IS NULL) OR
  (TYPE3=:P3_ITEM3 OR :P3_ITEM3 IS NULL) 

но это не сработало.

Я пытался использовать оператор CASE в своем предложении WHERE, но пока безуспешно. Кто-нибудь может помочь?

WHERE CASE
WHEN (:P3_ITEM1 IS NOT NULL) THEN (TYPE1=:P3_ITEM1)
WHEN (:P3_ITEM2 IS NOT NULL) THEN (TYPE2=:P3_ITEM2)
WHEN (:P3_ITEM3 IS NOT NULL) THEN (TYPE3=:P3_ITEM3)

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете просто использовать AND для объединения различных фильтров. Каждый фильтр будет иметь значение true, если для него установлено значение NULL, поэтому, если все три имеют значение NULL, вы получите все записи, но вы можете заполнить любой или даже все три параметра, чтобы отфильтровать нежелательные записи.

WHERE
  (TYPE1 = :P3_ITEM1 OR :P3_ITEM1 IS NULL) AND
  (TYPE2 = :P3_ITEM2 OR :P3_ITEM2 IS NULL) AND
  (TYPE3 = :P3_ITEM3 OR :P3_ITEM3 IS NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...