2017-04-16 5 views
1

인벤토리 계산을위한 가중 평균 비용을 계산하는 TSQL 함수를 만들려고합니다. 그래서 일월 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

에서 월 10 세부터 월 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