2017-07-15 7 views
2

Ich entwarfe derzeit Datenbank für die Erstellung von Rechnungen für Reederei. Der Punkt, an dem ich steckte, ist, wie Raten zu berechnen sind, die das Limit überschreiten.Versandkosten berechnen basierend auf zusätzliches Gewicht

Ich habe eine Tabelle tblRates genannt Spalten {id, from_weight, to_wight, Preis} Reihen wie

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

sein würde, wie ich mit Ihnen in leicht Raten bis zu 2 kg erhalten sehen kann, kann nur durch zwischen Abfrage verwenden. Aber wenn Gewicht 2kg überschreitet, möchte ich es in Scheibe von 500gm brechen und 20 Dollar für jede Scheibe laden. z.B. Wenn das Gewicht 3300 ist, wird der Preis $ 40 + $ (3 * 20) sein. Machen Sie sich keine Sorgen wegen der ortsbasierten Preisgestaltung. Es ist nur für die Einfachheit, um meine Frage zu verstehen, ich bewegte den Preis in diese Tabelle. es ist nur, wie die Scheiben zu bestimmen, wenn das Gewicht überschritten Grenze überschreitet.

// 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

Markieren Sie die von Ihnen verwendeten dbms. (Die meisten dbms-Produkte verfügen über eigene, nicht ANSI SQL-konforme gespeicherte Prozeduren.) – jarlh

+0

Fügen Sie Beispieltabellendaten und das erwartete Ergebnis hinzu - als formatierten Text. Zeigen Sie uns auch Ihren aktuellen Anfrageversuch. – jarlh

+0

Ich verwende derzeit MS SQL. –

Antwort

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; 

ich den Tisch neu gestaltet und verändert @Weight Decimal(7,3)-@Weight int (oder werden Sie ein Problem bei der Verwendung zwischen haben, versuchen @Weight = 1999,06 um den Fehler zu sehen).

+0

das ist, was ich suchte, danke Kumpel. –

Verwandte Themen