Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Cálculo de custo médio ponderado perpétuo SQL Server 2008


Se bem entendi, você quer o preço médio acumulado.

Essa abordagem usa subconsultas para calcular a quantidade total acumulada e o total acumulado pago. A proporção é o custo médio:
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

No SQL Server 2012, você pode fazer isso calculando diretamente somas cumulativas (deve ser mais eficiente). Você também pode fazer isso com cross apply , mas prefiro SQL padrão.