【问题标题】:Compute running balance for loan accounts in SQL Server [closed]在 SQL Server 中计算贷款帐户的运行余额 [关闭]
【发布时间】:2017-08-23 15:37:46
【问题描述】:

这些表在 SQL Server 中。我需要根据客户支付的金额获取每笔交易的账户未结余额。 PAYMENT 表包含客户在每笔交易中的付款。 Account 表包含客户的账户详情和总贷款金额。

付款

    +--------------+------------+----------+
    | 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         |
    +--------------+------------+----------+----------------------+

【问题讨论】:

  • 你试过什么?你在网上做过研究吗?
  • 检查此链接。这可能对您有很大帮助Refer this Link

标签: sql-server


【解决方案1】:

通过使用 BETWEEN UNBOUNDED PRECEDING 和 CURRENT 行之间的行,我们可以得到结果

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

【讨论】:

    【解决方案2】:

    如果是 2012+,您可以将窗口函数 sum() over 与简单的连接一起使用。

    示例

    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
    

    退货

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多