Sre*_*ag 13 sql sql-server-2008
如何WHERE在OVER子句中使用子句进行过滤?
即来自以下数据
LoanID | Principal | Tenor | AmortizingPrincipal
----------------------------------------
1 20000 1 5000
1 20000 2 5000
1 20000 3 5000
1 20000 4 5000
Run Code Online (Sandbox Code Playgroud)
我需要在每个Tenor中使用Balance Principal的第四个虚拟列,如下所示:
LoanID | Principal | Tenor | AmortizingPrincipal | BalancePrinicpal
-----------------------------------------------------------
1 20000 1 5000 20000
1 20000 2 5000 15000
1 20000 3 5000 10000
1 20000 4 5000 5000
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
SELECT
BalancePrincipal = Principal - SUM(AmortizingPrincipal) OVER(PARTITION BY LoanID WHERE Tenor < this row's tenor)
Run Code Online (Sandbox Code Playgroud)
更新:
以下查询为我提供了所需的结果:
SELECT
L1.*
,BalancePrincipal = AL1.Principal - ISNULL(Cumulative.AmortizingSum,0)
FROM
Loan L1
CROSS APPLY
(
SELECT
AmortizingSum = SUM(AmortizingPrincipal)
FROM
Loan L2
WHERE
L1.LoanID = L2.LoanID
AND
L1.Tenor > L2.Tenor
) Cumulative
可以改善吗?
| 归档时间: |
|
| 查看次数: |
22768 次 |
| 最近记录: |