Gute Frage. Der Ansatz, den ich nehme, ist, den Gesamtumsatz zu berechnen. Berechnen Sie dann kumulative Käufe und kombinieren Sie sie mit einer speziellen Logik, um die richtige Arithmetik für die Kombination zu erhalten:
select s.sku,
(MarginPos - SUM(case when s.totalqty < p.cumeqty - p.qty then p.price * p.qty
when s.totalqty between p.cumeqty - p.qty and p.qty
then s.price * (s.totalqty - (p.cumeqty - p.qty))
else 0
end)
) as Margin
from (select s.sku, SUM(price*qty) as MarginPos, SUM(qty) as totalqty
from sales s
) s left outer join
(select p.*,
(select SUM(p.qty) from purchase p2 where p2.sku = p.sku and p2.sale_id <= p.sale_id
) as cumeqty
from purchase s
)
on s.sku = p.sku
group by s.sku, MarginPos
Hinweis:Ich habe diese Abfrage nicht getestet, daher könnte sie Syntaxfehler enthalten.