我目前正在开展一个涉及使用用户提供的收费表来计算费用的项目。
表格如下:
MaxAmount Fee
10.00 1.95
20.00 2.95
30.00 3.95
50.00 4.95
如上表所示,任何最高10.00的MaxAmount都需要支付1.95的费用。在10.01和20.00之间的任何MaxAmount都需要收取2.95的费用等。最后,任何高于50.00的MaxAmount都需要收取4.95。
我正在尝试提出一个SQL查询,它将返回给定MaxAmount的正确费用。但是,我很难这样做。我尝试过类似以下内容(假设提供的MaxAmt为23.00):
SELECT Fee FROM ChargeTable WHERE 23.00 BETWEEN MaxAmt AND MaxAmt
当然,这并不能给我3.95的理想结果。
我无法将SQL的基于集合的逻辑应用于此类问题。
非常感谢任何和所有帮助!
答案 0 :(得分:1)
答案 1 :(得分:1)
如果MaxAmount
的行为符合表格建议,那么您可以使用:
select top 1 fee
from ChargeTable ct
where @Price <= MaxAount
order by MaxAmount desc
正如您所描述的那样,您真的想要另一行:
MaxAmount Fee
0.00 1.95
10.00 1.95
20.00 2.95
30.00 3.95
50.00 4.95
您的原始表格没有足够的值。当你有4个断点时,你实际上需要5个值 - 来处理两个极端。
使用此结构,您可以执行以下操作:
select top 1 fee
from ChargeTable ct
where @Price >= MaxAount
order by MaxAmount desc