我有两张类似下面的表:
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
绑扎带仅对超过上限的物品产生影响。
答案 0 :(得分: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;
如果您想要物品的不同价格,您必须将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.costPerItem
与p.upperLimit
相乘i.NumberPurchased > p.upperLimit
。 (5 * 10); p.costPerItem
乘以i.NumberPurchased - p.lowerLimit + 1. (9 * 10-6 + 1 . This
+ 1 is to include the
lowerLimit`数字也。)答案 1 :(得分: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;
答案 2 :(得分:1)
假设这些范围不重叠,我将使用基于TOP(1)
过滤器的以下解决方案(这样,SQL Server“确切地知道”对于每个项目,[最大]只有一行要查找PriceBands
表;注意:我没有测试过这个解决方案):
SELECT i.ItemID, i.NumberPurchased, i.NumberPurchased * oa.CostPerItem as ItemCost
FROM ItemTable i
OUTER APPLY
(
SELECT TOP(1) p.CostPerItem
FROM PriceBands p
WHERE i.NumberPurchased >= p.LowerLimit
AND i.NumberPurchased <= p.UpperLimit
) oa