2013-08-07 2 views
17

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

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

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

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

 
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) 
; 

ответ

34

Вы можете написать статью 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) 
+0

'(еще 0) 'не должны иметь скобок , – zygimantus

+1

@zygimantus. , , Спасибо. Очень любопытно, что нет истории редактирования, потому что формат кода сильно отличался от моего обычного стиля отступа. Все исправлено. –

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