0

私は次のようなテーブルを持っています

City    POSTAGE   PRICE**                   

HOUSTON   DEFAULT    20
DEFAULT   AIR        14
DEFAULT   GROUND     30
DEFAULT   DEFAULT    40

ここで、「CHICAGO、GROUND」のような組み合わせを使用してこのテーブルの価格を照会します。これにより、完全な組み合わせが存在するかどうかが確認されます。それ以外の場合は、DEFAULTに置き換えて値を検索する必要があります。

たとえば、HOUSTON、AIRは14を返す必要がありますHOUSTON、GROUNDは20を返す必要があります
HOUSTON、FEDEXは20を返す必要がありますCHICAGO、FEDEXは40を返す必要があります

複数のクエリを作成する代わりに、これを実現する方法はありますか。

ありがとう!

4

1 に答える 1

1

これは、パラメーターを渡すために SQL*Plus 構文を使用します。これを適切に変更する必要がある場合があります。

 select price
 from your_table
 where ( city = '&p_city' or city = 'DEFAULT') 
 and ( postage = '&p_postage' or postage = 'DEFAULT') 
 order by case when city = '&p_city' then 1 else 2 end 
          , case when postage = '&p_postage'  then 1 else 2 end 

これは複数の行を返しますが、おそらく 1 つの PRICE だけが必要です。ORDER BY 句は、POSTAGE の一致よりも CITY の一致を優先します。その後、最初の行を選択できます。

于 2012-10-14T03:40:26.450 に答える