我有两张表如下:
第一张表显示了所有订单:
table PURCHASE_ORDER:
ID UNIT_# PRICE ITEM_KEY
1 2 3 1
2 3 2.5 1
3 1 3 1
第二个表格显示了清单中可用的单位数量:
table INVENTORY:
ID ITEM_KEY UNIT_AVAILABLE
1 1 5
2 2 7
现在的问题是如何计算清单中物品的平均成本。例如,对于第1项:
第1项的平均成本=((1 * 3)+(3 * 2.5)+(1 * 3))/ 5
/ *清单中的项目总数为5(1 + 3 + 1 = 5)* /
在纯Microsoft SQL中有没有办法做到这一点?
答案 0 :(得分:1)
您需要一笔累计金额。我假设您使用的是SQL Server 2012,因为它简化了代码。
select po.item_key,
(sum(case when po.cumunits <= i.unit_available then po.[unit#]*po.price
when po.cumunits > i.unit_available and
po.cumunits - [unit#] < i.unit_available
then (i.unit_available - (po.cumunits - [unit#]))*po.price
else 0
end) /
sum(case when po.cumunits <= i.unit_available then po.[unit#]
when po.cumunits > i.unit_available and
po.cumunits - [unit#] < i.unit_available
then (i.unit_available - (po.cumunits - [unit#]))
else 0
end)
) as avgprice
from (select po.*, sum([unit#]) over (partition by item_key order by id) as cumunits
from purchase_order po
) po join
inventory i
on po.item_key = i.item_key
group po.item_key;
在早期版本的SQL Server中,您需要使用相关子查询来计算累积总和。
答案 1 :(得分:0)
根据表格的设置方式
select po.*
, i.*
, AvgPrice = sum(po.[UNIT_#] * po.Price) over (partition by po.item_key)
/
i.unit_available
from PURCHASE_ORDER po
inner join INVENTORY i
on (po.ITEM_KEY = i.ITEM_KEY);
应该做的伎俩