1

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

该表如下所示:

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 的基于集合的逻辑适应这种类型的问题时遇到了麻烦。

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

4

2 回答 2

1

您可以尝试以下方法:

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

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

于 2013-06-10T17:45:18.577 回答
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
于 2013-06-10T17:46:06.430 回答