¿Cómo puedo usar la cláusula WHERE
para filtrar en la cláusula OVER
?SQL: use la cláusula WHERE en OVER()?
es decir, de los datos siguientes
LoanID | Principal | Tenor | AmortizingPrincipal
----------------------------------------
1 20000 1 5000
1 20000 2 5000
1 20000 3 5000
1 20000 4 5000
necesito cuarta columna virtual con el director Equilibrio en cada Tenor como la siguiente:
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
algo como esto:
SELECT
BalancePrincipal = Principal - SUM(AmortizingPrincipal) OVER(PARTITION BY LoanID WHERE Tenor < this row's tenor)
ACTUALIZACIÓN:
La siguiente consulta me da el resultado deseado:
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
¿Puede ser mejor?
¿Qué DB está utilizando? ¿Estás tratando de obtener una suma acumulativa? –
Estoy usando SQL Server 2008. – Sreerag
Eche un vistazo a [Calcular un total en ejecución en SqlServer] (http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver). La respuesta aceptada tiene algunos puntos de referencia sobre algunas formas de calcular la suma acumulada. –