2017-10-20 5 views
0

こんにちは私は、私たちのデータブロックの基準に基づいて選択を試みています。彼らは、すべての選択肢の選択肢を持っており、私はそれがうまく動作するか、または動作するのに問題があります。私は今それを持ってどのようにOracle Where節を等価または値で改善する

はこれですが、それは本当に不格好ようだと、私は時々、それはいくつかの値

where SLRRDEF_RDEF_CODE = (select CASE 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'A100' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'A110' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B100' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B110' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B120' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B130' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'W110' 
        WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'W590' 
        ELSE :parm_dd_rdef.RDEF_CODE 
        END from dual 

を拾うdoesntのだと思う私はこのような効率的なのために何かを試してみたいが、私は行方不明取得を取得します括弧/キーワードのエラーと私はそれと何か関係があるとは思わない。

where (CASE 
     WHEN :parm_dd_rdef.RDEF_DESC like '-All-' THEN SLRRDEF_RDEF_CODE in ('A100','A110','B100','B110','B120','B130','W110','W590') 
     WHEN :parm_dd_rdef.RDEF_DESC not like '-All-' THEN SLRRDEF_RDEF_CODE = :parm_dd_rdef.RDEF_CODE 
     END) 
     AND 

where SLRRDEF_RDEF_CODE in (CASE WHEN :parm_dd_rdef.RDEF_DESC like '-All-' 
THEN ('A100','A110','B100','B110','B120','B130','W110','W590') 
ELSE :parm_dd_rdef.RDEF_CODE) 
+0

。完全なSQLスクリプトを共有する心ですか? – Twelfth

+0

残念ながら、私は基本的にこのことを一度に少し書き直し、ユーザーが最初に望んでいるものを改善しようとしているので、これはすべてのコード選択または個々の選択 –

答えて

3

caseを助けることができる誰もが本当にあなたはそれが正常に許可されていない場所でブール論理を使用できるようにすることを意図しているだろう。 where句は最初はブール論理に基づいているため、caseステートメントを使用すると、通常は間違いがあります。

それはあなたが達成しようとしている正確に何を伝えるのは難しいのですが、少し補間、私はこれはあなたのシナリオへのよりよい解決策かもしれないと思う:

WHERE SLRRDEF_RDEF_CODE = :parm_dd_rdef.RDEF_CODE 
     OR (:parm_dd_rdef.RDEF_DESC = '-All-' 
      and SLRRDEF_RDEF_CODE 
       in ('A100','A110','B100','B110','B120','B130','W110','W590')) 

あなたが本当に気にしないのであればSLRRDEF_RDEF_CODEの値パラメータが'-All-'あり、それはさらに簡単です:内部結合として(サブクエリ)には、多くの場合、より良い表現され

where SLRRDEF_RDEF_CODE = :parm_dd_rdef.RDEF_CODE 
     OR :parm_dd_rdef.RDEF_DESC = '-All-' 
+0

本質的にこれは人々が欲しいです。そのすべてがA100、B100などの関連するすべてのコードを選択する必要がある場合は、SLRRDEF_RDEF_CODE =:parm_dd_rdef.RDEF_CODEとなるコードを選択する必要があります。 –

+0

@Taku_アランの最後のビットがあなたのニーズを満たしていますか? – Twelfth

+0

はい!それは実際に私が受け取ったデータは、私は誰かに尋ねる必要があるカップルの質問をポーズします(部屋が間違っているように引っ張っているように!)ありがとう –

関連する問題