Если бы это было для отображения / отчета, я бы сделал промежуточные итоги, выполняя это с помощью sql - это огромная PIA.
SELECT
p.Amount,
r.Refund,
Sum(rPrevious.Refunds) As RunningTotal,
FROM Purchases p
Inner Join Refunds r On r.PurchaseId = p.PurchaseID And r.RefundID = @RefundID
Inner Join Refunds rPrevious on r.PurchaseID = p.PurchaseID AND rPrevious.RefundID < @RefundID
WHERE p.PurchaseID = @PurchaseID
Group By p.Amount,r.Refund
Даст вам 216 10,2.50,0и 10,2.25,2,5 для 217, так что
Select (Amount - RunningTotal) as Subtotal,
Refund,
(Amount - Refund - RunningTotal) as Total
From
( SELECT
p.Amount,
r.Refund
Sum(rPrevious.Refunds) As RunningTotal,
FROM Purchases p
Inner Join Refunds r On r.PurchaseId = p.PurchaseID And r.RefundID = @RefundID
Inner Join Refunds rPrevious on rPrevious on r.PurchaseID = p.PurchaseID
AND rPrevious.RefundID < @RefundID
WHERE p.PurchaseID = @PurchaseID
Group By p.Amount,r.Refund
) RunningTotals
Должен сделать работу, хотя не проверено, и я мог бы получить лицензию с именами ваших столбцов.
Теория звукахотя нужной вам строкой является Сумма покупки - Сумма возмещения <@RefundID Сумма возмещения для суммы возврата и вашей общей суммы только одна - другая.Или приобрести Сумма - Сумма возмещения <strong><= </strong> @ RefundID
Внутренний трюк с запросом только что избавил вас от множества проблем с получением суммы возмещения?дважды, один раз для промежуточного итога и один раз для всего.
Добавлены пропущенные скобки ...