2017-04-16 88 views
1

我正在尝试创建一个TSQL函数来计算库存计算的加权平均成本。所以给出下面的表结构TSQL加权平均值

ProductId | DatePurchased | Qty | Cost 
--------- | ------------- | --- | ---- 
1   | Jan 1   | 10 | 1.50 
1   | Jan 10  | 5 | 2.00 
1   | Jan 20  | 7 | 2.50 

现在,如果年01月21有人购买15的加权成本将是

((7 * 2.5)+(5 * 2.0)+(3 * 1.5))/ 15 = 2.13

基本上,这是从7月20日,5月从10和从3月1

平均成本我相信这可以用某种递归CTE的进行,但由有人比我聪明。

回答

1

一重均是简单的:

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; 
+0

正是基于这里的描述 http://www.accounting-basics-for-students.com/fifo-method.html – Craig

+0

@Craig。 。 。您正在使用LIFO方法,它似乎与“加权平均”方法不同。 –

+0

你是对的(会计可能不是我的强项)。加权平均值似乎是最不准确的IMO,但这正是客户想要的。 – Craig