我有一张像
这样的表格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
有没有办法实现这一目标,而不是编写多个查询..
谢谢你!答案 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上的匹配。然后,您可以选择第一行。