Подтвердить что ты не робот

Условие условного WHERE с оператором CASE в Oracle

Я совершенно новый для мира Oracle, так что это может быть софтбол. При работе с SSRS-сообщением я передаю строку состояний в представление. Твист состоит в том, что пользователи также могут выбрать выделение из списка состояний под названием "[Нет выбора]"... (эта часть не выполнялась, и я застрял в реализации этого способа)

Если они выбирают параметр "Нет выбора", я просто хочу вернуть все состояния по умолчанию, иначе вернем только список состояний, которые находятся в моем списке, разделенном запятыми.

Это действительно похоже, что это должно быть легко, но я застрял. Вот код, который я до сих пор (просто пытаюсь заставить образец работать), но мои глаза, наконец, скрестились, пытаясь добиться этого.

Может кто-нибудь дать мне какое-то направление по этому поводу?

begin
  :stateCode:='MO,FL,TX';
  --:stateCode:='[ No Selection ]';
end;
/

select count(*) as StateCount, :stateCode as SelectedVal
from hcp_state vw
where 
  (case 
      when (:stateCode = '') then (1)
      when (:stateCode != '') then (vw.state_cd in (:stateCode))
      (else 0)
  end)
;
4b9b3361

Ответ 1

Вы можете написать предложение where как:

where (case when (:stateCode = '') then (1)
            when (:stateCode != '') and (vw.state_cd in (:stateCode)) then 1
            else 0)
       end) = 1;

В качестве альтернативы полностью удалите case:

where (:stateCode = '') or
      ((:stateCode != '') and vw.state_cd in (:stateCode));

Или еще лучше:

where (:stateCode = '') or vw.state_cd in (:stateCode)