在SQL中复制PMT函数,使用列值作为输入

在SQL中复制PMT函数,使用列值作为输入,sql,Sql,在excel中,付款交单功能会根据债券的年利率、总期限数、原始面值和期末价值按月付款 计算每月付款的数学公式为: M=[OF(i(1+i)^n)]/[(1+i)^(n-1)] M=Monthly payment OF=Original Face i=annual interest rate/12 n=number of periods 为了使用(i=0.08/12,n=10,OF=10000)作为输入来计算每月付款,我使用以下方法: if object_id('dbo.PMT') >

在excel中,付款交单功能会根据债券的年利率、总期限数、原始面值和期末价值按月付款

计算每月付款的数学公式为:

M=[OF(i(1+i)^n)]/[(1+i)^(n-1)]

M=Monthly payment
OF=Original Face
i=annual interest rate/12
n=number of periods
为了使用(i=0.08/12,n=10,OF=10000)作为输入来计算每月付款,我使用以下方法:

if object_id('dbo.PMT') > 0
drop function dbo.PMT
go

create function dbo.PMT(@rate numeric(15,9), @periods smallint, @principal numeric(20,2) )
returns numeric (38,9)
as
begin
declare @pmt numeric (38,9)
select @pmt = @principal 
/ (power(1+@rate,@periods)-1) 
* (@rate*power(1+@rate,@periods))
return @pmt
end

go
然后根据我使用的论坛更正数据类型:

drop function dbo.PMT
go
create function dbo.PMT
(
@rate float,
@periods smallint,
@principal numeric(20,2)
)
returns numeric (38,9)
as
begin
declare @pmt numeric (38,9)

declare @WK_periods float,
@WK_principal float,
@wk_One float,
@WK_power float

select  @WK_periods = @periods,
@WK_principal = @principal,
@WK_One = 1

select  @pmt =
round(
( @WK_principal * (@rate*power(@WK_One+@rate,@WK_periods)))
/ (power(@WK_One+@rate,@WK_periods)-@WK_One)
,9)

return @pmt

end
go
declare @rate float
select @rate = .0800000000000/12.000000000000000000

select PMT = dbo.PMT( @rate, 10 , 10000 )

PMT                                                      
这返回了一个准确和正确的答案。然而,有没有一种方法可以做到这一点,从而不用这些常量(i=.08/12,n=10等)作为输入,我可以使用一列值?我有大约10000张债券,所有债券都有不同的期限、利率和原始面额,需要根据它们的列计算每月付款。理想情况下,我会有一个额外的列显示每个债券的每月付款。任何帮助都是难以置信的,谢谢

选择
SELECT
    <originalcolumns>,
    dbo.PMT(M.RateColumn, M.periodsColumn, M.principalColumn)
FROM
    MyTable M
, dbo.PMT(M.Rate列、M.periodsColumn列、M.principalColumn) 从…起 MyTable M
那么您是在表中输入列吗?如果是,请添加此数据和示例数据