を照会するには、ヘルプ「プラグ操作で」表Iは、手動で入力された変数(ラベル)指定されたローンの償却スケジュールを作成するには、以下のクエリを持っている:のSQL Server 2012から
DECLARE @PV as Float = -290000 --Loan Amount
,@FV as float = 0 --Value of the loan at termination
,@Term as float = 30 --The term of the loan in years
,@Pay_type as bit = 0 --Identifies the payment as due at the end (0) or the beginning (1) of the period
,@annual_rate as float = .03375 --The annual rate of interest
,@payment_frequency as float = 12 --The number of payments in a year
,@startdate as datetime = '07/31/2016'
,@rate as float
,@nper as float
Set @rate = @annual_rate/@payment_frequency
Set @nper = @Term * @payment_frequency
;WITH
Nbrs_3(n) AS (SELECT 1 UNION SELECT 0),
Nbrs_2(n) AS (SELECT 1 FROM Nbrs_3 n1 CROSS JOIN Nbrs_3 n2),
Nbrs_1(n) AS (SELECT 1 FROM Nbrs_2 n1 CROSS JOIN Nbrs_2 n2),
Nbrs_0(n) AS (SELECT 1 FROM Nbrs_1 n1 CROSS JOIN Nbrs_1 n2),
Nbrs (n) AS (SELECT 1 FROM Nbrs_0 n1 CROSS JOIN Nbrs_0 n2)
SELECT n as [Period]
,CASE @payment_frequency
WHEN 13 THEN DATEADD(week,4*n,@startdate)
WHEN 26 THEN DATEADD(week,2*n,@startdate)
WHEN 52 THEN DATEADD(week,n,@startdate)
ELSE DATEADD(M,12*n/@payment_frequency,@startdate) END as [Due Date]
,-wct.PV(@rate,@nper-(n- 1)
,wct.PMT(@rate,@nper,@PV,@FV,@pay_type),@FV,@pay_type) as [Starting Balance]
,wct.PMT(@rate,@nper,@PV,@FV,@pay_type) as [Payment]
,wct.IPMT(@rate,n,@nper,@PV,@FV,@pay_type) as [Interest Payment]
,wct.PPMT(@rate,n,@nper,@PV,@FV,@pay_type) as [Principal Payment]
,-wct.PV(@rate,@nper-n,wct.PMT(@rate,@nper,@PV,@FV,@pay_type),@FV,@pay_type) as [Ending Balance]
FROM (SELECT ROW_NUMBER() OVER (ORDER BY n)
FROM Nbrs) D(n)
WHERE n <= @nper
私がやろうとしていますどのような既に変数(PV、期間、レートなど)に値が割り当てられているローンのテーブル(dbo.Loans)からこのクエリを取得しています。私はこれをテーブル値関数にすることが最善であると考えていますが、関数についてもあまり経験はなく、適切なコーディングを行うことができません。
ここに非常に注意してください。これは金融アプリケーションのように見え、すべてを浮動体と定義しています。浮動小数点数は、おおよそのデータ型であるため、精度を失う可能性があります。浮動小数点数での分割は正確に格納できない値で終わるので、実際に支払いを計算するようなことをすることで現れ始めます。数値データ型を使用する方がよいでしょう。もちろん、年間の支払い回数などの場合、intははるかに意味があります。 –