2017-08-23 20 views
-1

これらのテーブルはSQL Serverにあります。顧客が支払った金額に基づいて取引ごとの口座残高を取得する必要があります。 PAYMENTテーブルには、すべての取引における顧客の支払いが含まれています。 Accountテーブルには、クライアントのアカウントの詳細と総貸付金額が含まれています。SQL Serverの貸出口座の実行残高を計算します

支払い

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

何を試しましたか?オンラインで研究をしたことがありますか? – RealCheeseLord

+0

このリンクをチェックしてください。これはあなたに多くの助けになるかもしれません[このリンクを参照](https://stackoverflow.com/questions/40236663/ledger-report-logic-in-stored-procedure) –

答えて

1

我々は結果に

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 
0

2012年の場合は、以上の窓関数sum()を単純結合で使用します。 UNBOUNDED PRECEDINGと現在の行BETWEEN行を使用することにより

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 

戻り

enter image description here

関連する問題