Sql server 计算SQL Server中贷款帐户的运行余额
这些表位于SQL Server中。我需要根据客户支付的金额获得每笔交易账户的未清余额。Sql server 计算SQL Server中贷款帐户的运行余额,sql-server,Sql Server,这些表位于SQL Server中。我需要根据客户支付的金额获得每笔交易账户的未清余额。付款表包含客户在每笔交易中的付款。账户表包含客户的账户明细和贷款总额 付款: +--------------+------------+----------+ | payment_date | account_no | amount | +--------------+------------+----------+ | 2017-08-10 | 123456789 |
付款
表包含客户在每笔交易中的付款。账户
表包含客户的账户明细和贷款总额
付款:
+--------------+------------+----------+
| payment_date | account_no | amount |
+--------------+------------+----------+
| 2017-08-10 | 123456789 | 5000 |
| 2017-08-15 | 987654321 | 3000 |
| 2017-09-15 | 987654321 | 3000 |
| 2017-10-11 | 123456789 | 4000 |
| 2017-10-16 | 987654321 | 3500 |
| 2017-11-10 | 123456789 | 3000 |
| 2017-11-15 | 987654321 | 2500 |
+--------------+------------+----------+
+--------------+-------------+---------------+
| account_no | accountname | loan_amount |
+--------------+-------------+---------------+
| 123456789 | John | 15000 |
| 987654321 | Jane | 20000 |
+--------------+-------------+---------------+
+--------------+------------+----------+----------------------+
| payment_date | account_no | amount | outstanding_balance |
+--------------+------------+----------+----------------------+
| 2017-08-10 | 123456789 | 5000 | 10000 |
| 2017-10-11 | 123456789 | 4000 | 6000 |
| 2017-11-10 | 123456789 | 3000 | 3000 |
| 2017-08-15 | 987654321 | 3000 | 17000 |
| 2017-09-15 | 987654321 | 3000 | 14000 |
| 2017-10-16 | 987654321 | 3500 | 11500 |
| 2017-11-15 | 987654321 | 2500 | 9000 |
+--------------+------------+----------+----------------------+
账户:
+--------------+------------+----------+
| payment_date | account_no | amount |
+--------------+------------+----------+
| 2017-08-10 | 123456789 | 5000 |
| 2017-08-15 | 987654321 | 3000 |
| 2017-09-15 | 987654321 | 3000 |
| 2017-10-11 | 123456789 | 4000 |
| 2017-10-16 | 987654321 | 3500 |
| 2017-11-10 | 123456789 | 3000 |
| 2017-11-15 | 987654321 | 2500 |
+--------------+------------+----------+
+--------------+-------------+---------------+
| account_no | accountname | loan_amount |
+--------------+-------------+---------------+
| 123456789 | John | 15000 |
| 987654321 | Jane | 20000 |
+--------------+-------------+---------------+
+--------------+------------+----------+----------------------+
| payment_date | account_no | amount | outstanding_balance |
+--------------+------------+----------+----------------------+
| 2017-08-10 | 123456789 | 5000 | 10000 |
| 2017-10-11 | 123456789 | 4000 | 6000 |
| 2017-11-10 | 123456789 | 3000 | 3000 |
| 2017-08-15 | 987654321 | 3000 | 17000 |
| 2017-09-15 | 987654321 | 3000 | 14000 |
| 2017-10-16 | 987654321 | 3500 | 11500 |
| 2017-11-15 | 987654321 | 2500 | 9000 |
+--------------+------------+----------+----------------------+
从这些表中,我应该能够显示以下数据:
客户分类账:
+--------------+------------+----------+
| payment_date | account_no | amount |
+--------------+------------+----------+
| 2017-08-10 | 123456789 | 5000 |
| 2017-08-15 | 987654321 | 3000 |
| 2017-09-15 | 987654321 | 3000 |
| 2017-10-11 | 123456789 | 4000 |
| 2017-10-16 | 987654321 | 3500 |
| 2017-11-10 | 123456789 | 3000 |
| 2017-11-15 | 987654321 | 2500 |
+--------------+------------+----------+
+--------------+-------------+---------------+
| account_no | accountname | loan_amount |
+--------------+-------------+---------------+
| 123456789 | John | 15000 |
| 987654321 | Jane | 20000 |
+--------------+-------------+---------------+
+--------------+------------+----------+----------------------+
| payment_date | account_no | amount | outstanding_balance |
+--------------+------------+----------+----------------------+
| 2017-08-10 | 123456789 | 5000 | 10000 |
| 2017-10-11 | 123456789 | 4000 | 6000 |
| 2017-11-10 | 123456789 | 3000 | 3000 |
| 2017-08-15 | 987654321 | 3000 | 17000 |
| 2017-09-15 | 987654321 | 3000 | 14000 |
| 2017-10-16 | 987654321 | 3500 | 11500 |
| 2017-11-15 | 987654321 | 2500 | 9000 |
+--------------+------------+----------+----------------------+
如果是2012+,则可以将窗口函数sum()与简单联接配合使用 示例
Select P.*
,outstanding = A.loan_amount - sum(P.amount) over (Partition By P.account_no Order By P.payment_date)
From Payment P
Join Account A on A.account_no=P.account_no
返回
通过使用无界前一行和当前行之间的行,我们可以得到结果
SELECT p.payment_date ,
a.account_no ,
p.amount ,
outstanding_balance=a.loan_amount-sum( p.amount)OVER(
PARTITION BY a.account_no ORDER BY a.account_no rows BETWEEN UNBOUNDED PRECEDING AND CURRENT row)
FROM @payment p
INNER JOIN @account a
ON p.account_no=a.account_no
结果
payment_date account_no amount outstanding_balance
--------------------------------------------------------
2017-08-10 123456789 5000 10000
2017-10-11 123456789 4000 6000
2017-11-10 123456789 3000 3000
2017-11-15 987654321 2500 17500
2017-10-16 987654321 3500 14000
2017-08-15 987654321 3000 11000
2017-09-15 987654321 3000 8000
你试过什么?你在网上做过什么研究吗?查看这个链接。这可能会对你有很大帮助