Условие условного 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)
;
Ответы
Ответ 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)