2

我有两个类似于下面的表:

ItemTable
-----------------------------
ItemId | NumberPurchased
1      | 10
2      | 90

我需要根据下表计算出订单的总成本,该表根据订购的数量对每件商品的价格进行调整:

PriceBands
-----------------------------
ScaleId | LowerLimit | UpperLimit | CostPerItem
1       | 1          | 5          | 10
2       | 6          | 10         | 9
3       | 11         | 20         | 8
...

我需要以某种方式计算出总成本并将其加入第一张桌子(物品)。

有人可以帮忙吗?

为了清楚 ItemId 1,计算如下:

NumberPurchased = 10
(5 * 10) + (5 * 9)  = 95

条带条带仅对超过上限的项目产生影响。

4

2 回答 2

4

如果您对每件商品都有相同的价格,那么这样的事情可能会奏效:

SELECT i.itemID, i.NumberPurchased, i.NumberPurchased * p.costPerItem as "Cost"
FROM itemTable i, PriceBands p
WHERE i.NumberPurchased >= p.LowerLimit 
      AND i.NumberPurchased <= p.UpperLimit;

sqlfiddle demo

如果您想要商品的不同价格,您必须将 itemId 放入 priceBands 并加入该 itemId 上的两个表。


要处理购买的每一层号码的增量成本,您可以执行以下操作:

SELECT i.itemID, i.NumberPurchased, SUM((
      CASE 
        WHEN i.NumberPurchased > p.upperLimit
          THEN p.upperLimit
        ELSE i.NumberPurchased - p.LowerLimit + 1
        END
      ) * p.costPerItem) AS "Cost"
FROM itemTable i, PriceBands p
WHERE i.NumberPurchased > p.LowerLimit
GROUP BY 1, 2

这将遍历 PriceBands 表中的每一行,i.NumberPurchased > p.LowerLimit同时进行求和:

  • p.costPerItemp.upperLimitwhile相乘i.NumberPurchased > p.upperLimit。(5 * 10);
  • 乘以p.costPerItemi.NumberPurchased - p.lowerLimit + 1. (9 * 10-6 + 1 . This+ 1 is to include thelowerLimit` 数)。

sqlfiddle demo

于 2013-10-19T21:32:19.537 回答
1

如果 PriceBands 表中有外键,查询将返回您询问的内容:

select it.itemId, pb.costPerItem
from ItemTable it, 
     PriceBands pb
where it.itemId = pb.itemId
and it.numberPurchased >= pb.LowerLimit
and it.numberPurchased <= pb.upperLimit;
于 2013-10-19T21:36:58.737 回答