我的任务是生成账户欠款报告。
这是相当直截了当的,除了 1 列 DaysInArrears。
我创建了一个查询,用于计算每次预定付款时帐户的欠款状态。
此查询使用类似于以下结果的临时表 (#ArrearAnalysis) 填充:
AgreementID DueDate AmountDue DueTD PaidTD FirstPaymentDue ArrearsStatus RN
184 2013-03-11 75.00 75.00 0.00 2013-03-11 1 1
184 2013-03-25 75.00 150.00 0.00 2013-03-11 1 2
184 2013-04-08 75.00 225.00 300.00 2013-03-11 0 3
184 2013-04-22 75.00 300.00 300.00 2013-03-11 0 4
184 2013-05-03 75.00 375.00 300.00 2013-03-11 1 5
184 2013-05-20 75.00 450.00 300.00 2013-03-11 1 6
我还从以下查询中填充了另一个临时表 (#ArrearsCheck):
INSERT INTO #ArrearsCheck
SELECT
AgreementID,
SUM(ArrearsStatus),
MAX(RN)
FROM
#ArrearsAnalysis
GROUP BY
AgreementID
然后我需要做的是回顾这些行,以确定它们何时陷入最新的欠款(欠款分数 1)
因此,对于上面的示例,我预计 2013 年 3 月 5 日的结果。
如果一个帐户从未有过付款,那么我将返回 FirstPaymentDue Date。如果一个帐户从未拖欠过,那么我只会返回 NULL
这是我迄今为止处理非付款人和非欠款的查询,我只需要循环帮助来解决上述问题(用 * * 突出显示):
SELECT
DISTINCT(A.AgreementID),
CASE WHEN (C.ArrearsTally <= 0)
THEN NULL
ELSE (CASE WHEN (C.ArrearsTally = C.PaymentCount)
THEN NULL
*ELSE 0*
END)
END AS ArrearsDate
FROM
#ArrearsAnalysis AS A
LEFT OUTER JOIN
#ArrearsCheck AS C ON A.AgreementID = C.AgreementID
这个查询的结果然后我将传递给我的下一个查询,它将计算今天和结果日期之间的差异(天数)。