我正在尝试创建TSQL函数来计算库存计算的加权平均成本。所以给出了下面的表格结构
ProductId | DatePurchased | Qty | Cost
--------- | ------------- | --- | ----
1 | Jan 1 | 10 | 1.50
1 | Jan 10 | 5 | 2.00
1 | Jan 20 | 7 | 2.50
现在如果在1月21日有人购买了15加权费用
((7 * 2.5)+(5 * 2.0)+(3 * 1.5))/ 15 = 2.13
基本上,这是1月20日的平均成本,1月10日的5月和1月1日的平均成本。
我确信这可以通过某种递归CTE来完成,但是比我更聪明的人。
答案 0 :(得分:2)
重量平均值很简单:
select sum(qty * cost) / sum(qty)
from t;
你正在寻找别的东西。也许是“分配”的平均值:
select sum(case when cume_qty - qty < 15 then qty * cost
else (cume_qty - 15) * cost
end) as allocated_average
from (select t.*,
sum(qty) over (partition by productid order by date desc) as cume_qty
from t
) t
where cume_qty - qty < 15 and
cume_qty >= 15;