查询表以获取多个组合和默认值

时间:2012-10-14 03:12:04

标签: database oracle lookup

我有一张像

这样的表格
City    POSTAGE   PRICE**                   

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

现在我想用'CHICAGO,GROUND'这样的组合查询这张桌子上的价格 应检查是否存在完美组合,否则我应该替换DEFAULT并搜索值..

例如, 休斯顿,AIR应该返回14 休斯顿,GROUND应该返回20
休斯敦,FEDEX应该返回20 芝加哥,FEDEX应该返回40

有没有办法实现这一目标,而不是编写多个查询..

谢谢你!

1 个答案:

答案 0 :(得分: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上的匹配。然后,您可以选择第一行。