2017-07-15 42 views
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 

,你可以看到,我可以很容易地只是通過查詢之間使用get率高達王下但是當體重超過2公斤時,我想把它分成500克的片,每片要收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 SQL兼容存儲過程。) – 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 Decimal(7,3)@Weight int(或者,你將有一個問題之間使用;儘量@weight = 1999.06看到錯誤)。

+0

這些切片的數量多數民衆贊成我正在尋找感謝隊友。 –