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 

这将返回多行,但大概您只需要一个 PRICE。ORDER BY 子句将 CITY 上的匹配优先于 POSTAGE 上的匹配。然后,您可以选择第一行。

于 2012-10-14T03:40:26.450 回答