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 の手数料が請求されます。

特定の MaxAmount に対して正しい料金を返す SQL クエリを作成しようとしています。しかし、私はそうするのに苦労しています。次のようなことを試しました (提供された 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 つの値が必要です。これは、2 つの極値を処理するためです。

この構造を使用すると、次のことができます。

select top 1 fee
from ChargeTable ct
where @Price >= MaxAount
order by MaxAmount desc
于 2013-06-10T17:46:06.430 に答える