我正在尝试创建一个 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 日的 7 个、1 月 10 日的 5 个和 1 月 1 日的 3 个的平均成本。
我确信这可以通过某种递归 CTE 来完成,但由比我更聪明的人完成。
最佳答案
权重平均值很简单:
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;
关于sql - SQL 加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432630/