我们目前存储的付款时间表如下:
Item No | Due Date | Amount Due
108 | 2013-02-01 | 60.00
108 | 2013-02-26 | 60.00
108 | 2013-03-01 | 60.00
108 | 2013-03-15 | 60.00
注意:日期之间的差异是不一致的,即某些项目可能是几周、两周或几个月。
我理想需要解决的是如何将上表重新查询为以下格式:
Item No | Due Date | Date From | Date To | Amount Due
108 | 2013-02-01 | 2013-01-14 | 2013-02-25 | 60.00
108 | 2013-02-26 | 2013-02-26 | 2013-02-28 | 60.00
108 | 2013-03-01 | 2013-03-01 | 2013-03-14 | 60.00
108 | 2013-03-15 | 2013-03-15 | 2013-03-25 | 60.00
为使这成为可能而输入的额外两个日期将是开始日期 (2013-01-14) 和今天的日期 (2013-03-25)。
每个范围应从原始到期日到下一个到期日的前一天。
任何建议将不胜感激。
更新
这是我到目前为止所尝试的:
WITH
CTE_Repayments(AgreementID, DueDate, AmountDue)
AS
(
-- Anchor Member Definition
SELECT
AgreementID, StartDate, CONVERT(DECIMAL(9,2),0.00)
FROM
Loans AS L
WHERE
L.AgreementID = 111
UNION ALL
-- Recursive Member Definition
SELECT
RB.AgreementID, RB.DueDate, CONVERT(Decimal(9,2),RB.AmountDue)
FROM
(
SELECT *
FROM RepaymentBreakdown
WHERE AgreementID = 111
) AS RB
INNER JOIN
CTE_Repayments AS R
ON RB.AgreementID = R.AgreementID
)
-- Statement that Executes CTE
SELECT AgreementID, DueDate, AmountDue
FROM CTE_Repayments
但这不起作用。
我假设我需要添加一条起始日期为 Anchor 成员的记录。
好的,它现在返回带有上面修改后的代码的数据。
我现在遇到的问题是结果集不限于来自 Anchor 的 AgreementID,我收到一个错误:
Msg 530, Level 16, State 1, Line 1 语句终止。在语句完成之前,最大递归 100 已用完。