Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Calcul du coût moyen pondéré perpétuel SQL Server 2008

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.