現在、支払いスケジュールは次のように保存されています。
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
注: 日付の違いには一貫性がありません。つまり、アイテムによっては、数週間、2 週間、または数か月になる場合があります。
私が理想的に取り組む必要があるのは、上記のテーブルを次の形式に再クエリする方法です。
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
これを可能にするために追加する 2 つの日付は、開始日 (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
しかし、これはうまくいきません。
アンカーメンバーとして開始日を持つレコードを追加する必要があると想定しています。
OK、上記の修正されたコードで Data が返されるようになりました。
私が今抱えている問題は、結果セットがアンカーからのAgreementIDに制限されておらず、エラーが発生することです:
メッセージ 530、レベル 16、状態 1、行 1 ステートメントは終了しました。ステートメントが完了する前に、最大再帰回数 100 を使い果たしました。