2017-07-15 1 views
2

Je suis actuellement en train de concevoir une base de données pour la facturation de compagnies maritimes. Le point où je suis bloqué est comment calculer les taux qui dépassent la limite wight.calculer les tarifs d'expédition en fonction du poids additionnel

J'ai une table appelée tblRates colonnes {id, from_weight, to_wight, prix} lignes sont comme

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

comme vous pouvez le voir, je peux facilement obtenir des tarifs JUSQU'A 2 kg en utilisant simplement entre la requête. Mais quand le poids dépasse 2kg je veux le casser en tranche de 500gm et charger 20 dollars pour chaque tranche. par exemple. Si le poids est de 3300, le prix sera de 40 $ + $ (3 * 20). ne vous inquiétez pas de prix basé sur la localisation. C'est juste pour la simplicité de comprendre ma question j'ai déplacé le prix dans cette table. C'est juste comment déterminer les tranches lorsque le poids donné dépasse la limite.

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

Marquez les dbms que vous utilisez. (La plupart des produits dbms ont leurs propres procédures stockées non conformes à ANSI SQL.) – jarlh

+0

Ajoutez les exemples de données de la table et le résultat attendu - sous forme de texte formaté. Montrez-nous également votre tentative de requête actuelle. – jarlh

+0

J'utilise actuellement MS sql. –

Répondre

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; 

Je redesigné votre table, et a changé @Weight Decimal(7,3)-@Weight int (ou, vous aurez un problème avec l'utilisation entre, essayez @Weight = 1999,06 voir l'erreur).

+0

c'est ce que je cherchais merci mon pote. –