SQL Server:计算摊销

Est*_* P. 4 sql sql-server

目前我正在努力解决以下问题:
我有两张桌子(合同和摊销).

合同:未偿还金额的合同信息
摊销:支付日期和摊销金额


我想要的结果是合同表和减少的数量.

;WITH CTE AS
(
        SELECT con.ID
              ,con.outstanding
              ,amo.amortization
              ,amo.amo_date
              ,ROW_NUMBER() OVER ( PARTITION BY con.ID
                                       ORDER BY amo.amo_date asc
                                  ) as rn    
          FROM contract con
    INNER JOIN amort amo
            ON amo.contractID = con.ID
)
SELECT ID
      ,outstanding
      ,outstanding - amortization as new_outstanding
      ,amo_date
  FROM CTE
Run Code Online (Sandbox Code Playgroud)

目前我得到了这个结果 - 这当然是错误的,因为只为new_outstanding计算了一个摊还:

ID  outstanding     new_outstanding     amo_date
1   100000          90000               01.08.2017 00:00:00
1   100000          80000               01.09.2017 00:00:00
1   100000          50000               01.10.2017 00:00:00
1   100000          90000               01.11.2017 00:00:00
1   100000          90000               01.12.2017 00:00:00
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

ID  outstanding     new_outstanding     amo_date
1   100000          90000               01.08.2017 00:00:00
1   100000          70000               01.09.2017 00:00:00
1   100000          20000               01.10.2017 00:00:00
1   100000          10000               01.11.2017 00:00:00
1   100000          0                   01.12.2017 00:00:00
Run Code Online (Sandbox Code Playgroud)

有什么简单的想法可以轻松解决这个问题吗?

Rextester:http: //rextester.com/SBLT77863

提前致谢!

Gor*_*off 6

我想你只需要一笔累计金额:

SELECT con.ID,
       con.outstanding,
       amo.amortization,
       amo.amo_date,
       (con.outstanding -
        sum(amo.amortization) over (partition by amo.contractId 
                                    order by amo.amo_date)
       ) as new_outstanding
FROM contract con INNER JOIN
     amort amo
     ON amo.contractID = con.ID;
Run Code Online (Sandbox Code Playgroud)