Jeśli dobrze rozumiem, chcesz uzyskać łączną średnią cenę.
W tym podejściu są używane podzapytania do obliczania skumulowanej całkowitej ilości i skumulowanej sumy zapłaconej. Stosunek to średni koszt:
select t.*, cumepaid / cumeqty as avg_cost
from (select t.*,
(select SUM(qty) from t t2 where t2.item_id = t.item_id and t2.purch_id <= t.purch_id
) as cumeqty,
(select SUM(qty*unit_price) from t t2 where t2.item_id = t.item_id and t2.purch_id <= t.purch_id
) as cumepaid
from t
) t
W SQL Server 2012 można to zrobić, bezpośrednio obliczając sumy skumulowane (powinno to być bardziej wydajne). Możesz to również zrobić za pomocą cross apply
, ale wolę standardowy SQL.