确定值是否在同一列中的两个其他值之间

时间:2013-06-10 17:40:56

标签: sql sql-server-2008 tsql

我目前正在开展一个涉及使用用户提供的收费表来计算费用的项目。

表格如下:

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的基于集合的逻辑应用于此类问题。

非常感谢任何和所有帮助!

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

SELECT min(Fee) FROM Fees WHERE 23<=MaxAmount 

看看这个例子: http://sqlfiddle.com/#!2/43f2a/5

答案 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