अच्छा प्रश्न। मैं जो दृष्टिकोण अपना रहा हूं वह कुल बिक्री की गणना करना है। फिर संचयी खरीदारी की गणना करें, और संयोजन के लिए सही अंकगणित प्राप्त करने के लिए उन्हें विशेष तर्क के साथ संयोजित करें:
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
नोट:मैंने इस क्वेरी का परीक्षण नहीं किया है, इसलिए इसमें सिंटैक्स त्रुटियां हो सकती हैं।