Câu hỏi hay. Cách tiếp cận mà tôi đang thực hiện là tính toán tổng doanh số bán hàng. Sau đó, tính toán các giao dịch mua tích lũy và kết hợp chúng với logic đặc biệt để có được số học phù hợp cho sự kết hợp:
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
Lưu ý:Tôi chưa kiểm tra truy vấn này nên nó có thể có lỗi cú pháp.