Я собираюсь сделать два предположения здесь, в надежде, что они - обоснованное предположение, которое может вам помочь:
1. То, что неоплаченные дела учитываются в промежуточном итоге с суммой 0.
2. Все неоплаченные дела - это те, которые присутствуют в PaymentPlanSchedule, но не в PaymentPlanPayments.
При соблюдении этих двух допущений решение будет следующим:
1. Создайте неоплаченный cte, содержащий все неоплаченные дела.
2. Другой cte allpaid_and_unpaid, который теперь делает объединение PaymentPlanPayments и неоплаченных, PaymentPlanPayments сохраняет свою первоначальную сумму, в то время как по умолчанию неоплачиваемое значение равно 0.
3. В вашем запросе используйте вместо этого PaymentPlanPayments этот allpaid_and_unpaid.
with unpaid as
(
select
pp.PApKey,
pps.PPSScheduleDate AS ScheduledDate,
pps.PPSScheduleAmount AS ScheduledAmount,
0 AS PaidAmount
from
LawFirm lf INNER JOIN MgmtCo mc ON mc.LFpKey = lf.LFpKey
INNER JOIN Assoc a ON mc.MCpKey = a.MCpKey
INNER JOIN [Case] c ON c.ASpKey = a.ASpKey
INNER JOIN PaymentPlan pp ON pp.CApKey = c.CApKey
RIGHT OUTER JOIN PaymentPlanSchedule pps ON pps.PApKey = pp.PApKey
where
lf.LFpKey = @LFpKey
AND mc.MCpKey = @MCpKey
AND a.ASpKey = @ASpKey
AND c.CAActive = 1
AND pp.PAActive = 1
AND pps.PPSActive = 1
AND NOT EXISTS
(
SELECT * from PaymentPlanPayments ppp where pps.PPSpKey = ppp.PPSpKey AND
ppp.PPPActive = 1)
),
allpaid_and_unpaid as
(
SELECT pp.PApKey,
pps.PPSScheduleDate AS ScheduledDate,
pps.PPSScheduleAmount AS ScheduledAmount,
ppp.PPPAmount AS PaidAmount,
FROM
LawFirm lf INNER JOIN MgmtCo mc ON mc.LFpKey = lf.LFpKey
INNER JOIN Assoc a ON mc.MCpKey = a.MCpKey
INNER JOIN [Case] c ON c.ASpKey = a.ASpKey
INNER JOIN PaymentPlan pp ON pp.CApKey = c.CApKey
RIGHT OUTER JOIN PaymentPlanSchedule pps ON pps.PApKey = pp.PApKey
RIGHT OUTER JOIN PaymentPlanPayments ppp ON pps.PPSpKey = ppp.PPSpKey
WHERE lf.LFpKey = @LFpKey
AND mc.MCpKey = @MCpKey
AND a.ASpKey = @ASpKey
AND c.CAActive = 1
AND pp.PAActive = 1
AND pps.PPSActive = 1
AND ppp.PPPActive = 1
UNION
SELECT * FROM unpaid
)
SELECT PApKey,
ScheduledDate,
ScheduledAmount,
PaidAmount,
SUM(PaidAmount) OVER (PARTITION BY PApKey ORDER BY ScheduleDate) AS PaymentTotal
FROM
allpaid_and_unpaid