2017-04-16 22 views
1

在庫計算の加重平均原価を計算するTSQL関数を作成しようとしています。だから、1月21日に、誰かが15を購入した場合、加重コストは次のようになりここで、次のテーブル構造TSQL加重平均

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

を与え

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

基本的には、それは月1

から1月10日と3から1月20日、5から7の平均コストは、私がすることで、この再帰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