2013-08-07 22 views
17

Oracle dünyasında yepyeni olduğum için bu bir softbol olabilir. Bir SSRS raporuyla çalışırken, bir dizi durumdan görüşe geçiyorum. Büküm, kullanıcıların "[Seçim Yok]" olarak adlandırılan durum listesinden bir seçim yapabilmeleridir ... (bu bölüm bunu yapmıyordu ve bu şekilde şeyleri uygulamakta kaldım)CASE deyimiyle koşullu WHERE yan tümcesi Oracle'da

İsterlerse Seçim Yok seçeneği, sonra tüm durumları varsayılan olarak döndürmek istiyorum, aksi halde virgülle ayrılmış listesindeki durumların listesini döndürürüm.

Bu gerçekten kolay olmalı gibi görünüyor ama sıkışıp kaldım. Şimdiye kadar sahip olduğum kod (sadece çalışmak için bir örnek almaya çalışıyorum) ama gözlerimin sonunda gitmeye çalışıyorum.

Lütfen bu konuda bana biraz yön verebilir misiniz? Alternatif

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

tamamen case kaldırmak toplam:

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

cevap

34

Sen where maddesini yazabilir,

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

Veya daha iyi

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

'(başka 0) 'parantez içermemelidir . – zygimantus

+1

@zygimantus. . . Teşekkür ederim. Düzenleme geçmişinin olmadığı gerçekten merak ediyor, çünkü kodun biçimi benim normal girinti tarzımdan oldukça farklıydı. Şimdi hepsi tamir edildi. –