0

下面的代码计算表ACCOUNT和的运行未结余额PAYMENT

select 
    b.payment_date,    
    a.account_no, a.accountname, a.loan_amount,
    b.amount, 
    ob = a.loan_amount - sum(b.amount) over (partition by b.account_no order by b.payment_date) 
from 
    account a 
inner join
    (select * from payment) b on a.account_no = b.account_no 
order by 
    a.account_no, b.payment_date

付款

    +--------------+------------+----------+
    | 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表相同的结构。

折扣

    +--------------+------------+----------+
    | payment_date | account_no |  amount  |
    +--------------+------------+----------+
    | 2017-08-10   |  123456789 |   100    |
    | 2017-08-15   |  987654321 |   100    |
    | 2017-09-15   |  987654321 |   100    |
    +--------------+------------+----------+

所以我决定在下面的查询中添加一个 UNION。但它返回不正确。价值观。请帮忙

select 
    b.payment_date, 
    a.account_no, a.accountname, a.loan_amount,
    b.amount,
    ob = a.loan_amount - sum(b.amount) over (partition by b.account_no order by b.payment_date) 
from 
    account a 
inner join
    (select * from payment union select * from discount) b on a.account_no = b.account_no 
order by 
    a.account_no, b.payment_date
4

2 回答 2

0

使用另一个 INNER JOIN

select 
    b.payment_date, 
    a.account_no, 
    a.loan_amount,
    b.amount,
    ob = a.loan_amount - sum(b.amount) over (partition by b.account_no order by b.payment_date),
    d.amount 
from 
    account a 
inner join
    payment b on a.account_no = b.account_no 
inner join
    discount d on (d.account_no = b.account_no and d.payment_date = b.payment_date)
order by 
    a.account_no, b.payment_date
于 2017-08-30T10:35:29.647 回答
0

折扣金额未反映在您的计算中。 ob = a.loan_amount - sum(b.amount) 你可能不一定需要联合,因为折扣是一个单独的表,你可以内部连接表并使用折扣金额来减少贷款金额 ob = (a.loan_amount- discount_amount) - sum(b.amount)

于 2017-08-30T15:31:59.497 回答