2016-03-21 12 views
0

に、私は正常に動作クエリでこれを持って行き方:ORA-01427エラーとORA-00907エラーサブクエリ

decode(substr(X_AV_ID,1,3) 
,'ECU','eCom' 
, decode(aven.lib, 'eCom', 'eCom','Autre')) flag, 

をそれから私は(同様に「%エキストラ%」aven.lib新しいパラメータを追加したいですそれを「余分」としてデコードする)。

だから私はそれを行うためのケースで、サブクエリを作成します。

decode(substr(X_AV_ID,1,3), 
        'ECU', 'eCom', 
        (select Case  
         When aven.lib = 'eCom' Then 'eCom' 
         When aven.lib Like '%Extra%' Then 'extra' 
         Else 'Autre' 
         End 
        From table_x aven 
        Limit 1  
        ) 
      ) flag 

私は、ORA-01427エラーをevitを1に結果を制限し、今私は、ORA-00907エラーが発生しました。

私はdecodeコマンドでlikeを使いたかったのですが、利用できませんでした。

ありがとうございます。

+1

Oracleと 'LIMIT'いただきありがとうございますか! – jarlh

答えて

0

REGEXP_LIKEを使用する場合には素晴らしい作品、私は結果を除いて得る。

  Case 

          When substr(X_AV_ID,1,3) = 'ECU' Then 'eCom' 

          When aven.lib= 'eCom' Then 'eCom' 

          When REGEXP_LIKE (aven.X_AV_LIBELLE, 'extra', 'i') Then 'extra' 

          Else 'Autre' 

          End 

はあなたの助け

1

まず、caseとしてあなたdecodeを書き換える:

おそらく
(case when substr(X_AV_ID, 1, 3) = 'ECU' then 'eCom' 
     when aven.lib = 'eCom' then 'eCom' 
     then 'Autre' 
end) as flag 

avenは、クエリに既にあります。だから、あなただけ行うことができます。

(case when substr(X_AV_ID, 1, 3) = 'ECU' then 'eCom' 
     when aven.lib = 'eCom' then 'eCom' 
     when aven.lib like '%Extra%' then 'extra' 
     then 'Autre' 
end) as flag 

注:私は一貫としても最初の比較のためにlikeを使用すると、おそらく最初の二つを組み合わせることになります。

(case when X_AV_ID like 'ECU%' or aven.lib = 'eCom' 
     then 'eCom' 
     when aven.lib like '%Extra%' 
     then 'extra' 
     then 'Autre' 
end) as flag 
+0

ありがとう、私はそれを試しましたが、私はこのORA-00905を持って、それを再度選択に入れてください。それは同じことです – naouf3l

+0

@ naouf3l。 。 。クエリ全体を追加する必要があります。これらの式には明らかなキーワードがありません。 –

+0

これは構文のため、私は代わりにElseの代わりに書いていました。 ORA-01427:単一行の副問合せは複数の行を戻します – naouf3l