Si j'ai bien compris, vous voulez le prix moyen cumulé.
Cette approche utilise des sous-requêtes pour calculer la quantité totale cumulée et le total cumulé payé. Le ratio est le coût moyen :
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
Dans SQL Server 2012, vous pouvez le faire en calculant directement les sommes cumulées (cela devrait être plus efficace). Vous pouvez également le faire avec cross apply
, mais je préfère le SQL standard.