web-dev-qa-db-ja.com

OracleのCASEステートメントを使用した条件付きWHERE句

これはソフトボールになる可能性があるので、私はOracleの世界ではまったく新しいです。 SSRSレポートを使用して、一連の状態をビューに渡します。ひねりは、ユーザーが「[選択なし]」という状態リストから選択を選択することもできるということです...(その部分はそうではなく、私はこの方法で物事を実装することに固執しています)

[選択なし]オプションを選択した場合は、デフォルトですべての状態を返します。それ以外の場合は、コンマ区切りリストにある状態のリストのみを返します。

これは本当に簡単なように思えますが、私は立ち往生しています。ここに私がこれまでに持っているコードがあります(サンプルを動作させようとしているだけです)が、私の目はついにそれを動かそうとしています。

誰も私にこれに関するいくつかの方向性を教えてもらえますか?

 begin 
:stateCode:= 'MO、FL、TX'; 
-:stateCode:= '[選択なし]'; 
 end; 
 when(:stateCode = '')then(1)
 when(:stateCode!= '')then(vw.state_cd in(:stateCode))
(else 0)
  終わり)
;
22
Rob Horton

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)
41
Gordon Linoff