2017-07-15 16 views
2

私は現在、運送会社の請求書作成用のデータベースを設計中です。 私が執着したポイントは、ワイトリミットを超えるレートの計算方法です。追加の重量に基づいて送料を計算する

私はあなたが私だけで簡単にクエリの間で使用して2キロ件まで速度を得ることができます見ることができるようにtblRates 列{ID、from_weight、to_wight、価格} 行と呼ばれる一つのテーブルが

[{1,0,499,20$}, 
{2,500,1999,40$}, //max weight 2Kg 
{3,2000,'unlimited','$20'}] //this row holds pricing for every add 500gm 

ようになる持っています。しかし、体重が2kgを超えると、それを500gmのスライスに分割し、各スライスに20ドルを請求したいと思います。例えば重量が3300の場合、価格は$ 40 + $(3 * 20)になります。ロケーションベースの価格設定について心配しないでください。私の質問を理解するための単純さのために、私はこのテーブルに価格を移しました。与えられた重量が限界を超えたときにどのようにスライスを決定するか。

// WIP SP

CREATE Procedure Sic.getRates 
@Weight Decimal(7,3), 
AS 
BEGIN 
    SELECT Price 
     FROM tblRates 
    WHERE @weight BETWEEN from_rates AND to_rates; 
END 
+0

使用しているdbmsにタグを付けます。ほとんどのdbms製品には、ANSI準拠の非ストアド・プロシージャがあります。 – jarlh

+0

サンプル・テーブル・データと期待される結果をフォーマット済みのテキストとして追加します。現在のクエリの試行も表示してください。 – jarlh

+0

私は現在MS sqlを使用しています。 –

答えて

2

http://sqlfiddle.com/#!6/127b8/31

Create Table tblRates(
    id int, 
    from_weight int, 
    to_wight int, 
    base_price int, 
    extra_price_per_500_g int 
); 

Insert Into tblRates (id,from_weight,to_wight,base_price,extra_price_per_500_g) 
Values 
(1,0,499,20,0), 
(2,500,1999,40,0), 
(3,2000,2147483647,40,20); 

Declare @Weight int = 3300 

Select 
    base_price + extra_price_per_500_g * CEILING((@Weight - from_weight)/500.0) price 
From 
    tblRates 
Where 
    @Weight BETWEEN from_weight AND to_wight; 
私はあなたのテーブルを再設計し、 @Weight int@Weight Decimal(7,3)を変更(または、あなたが間を使用して問題を持っています

; @Weight = 1999.06を試してみてください間違いを見るために)。

+0

は、私が感謝の仲間を探していたものです。 –

関連する問題