Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fortlaufende gewichtete Durchschnittskostenberechnung SQL Server 2008

Wenn ich das richtig verstehe, wollen Sie den kumulierten Durchschnittspreis.

Dieser Ansatz verwendet Unterabfragen, um die kumulierte Gesamtmenge und die kumulierte bezahlte Summe zu berechnen. Das Verhältnis sind die durchschnittlichen Kosten:

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

In SQL Server 2012 können Sie dies tun, indem Sie kumulierte Summen direkt berechnen (sollte effizienter sein). Sie können dies auch mit cross apply tun , aber ich bevorzuge Standard-SQL.