2013-08-07 185 views
17

我是全新的Oracle世界,因此這可能是壘球。在處理SSRS報告時,我將一串狀態傳遞給一個視圖。扭曲的是,用戶也可以從狀態列表中選擇一個名爲「[沒有選擇]」的選擇......(這部分不是在做,我堅持以這種方式實施)有條件的WHERE子句與Oracle中的CASE語句

如果他們選擇沒有選擇選項,那麼我只是想要默認返回所有的狀態,否則返回在我的逗號分隔列表中的狀態列表。

這真的看起來應該很容易,但我卡住了。這是我迄今爲止的代碼(只是爲了獲得一個樣本來工作),但我的眼睛終於消失了,試圖去實現它。

請問有人能給我這個指示嗎?

 
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。 。 。謝謝。它真的好奇,沒有編輯歷史,因爲代碼的格式與我通常的縮進風格截然不同。現在全部修好了。 –