在此示例中,有5个期间的实际余额和隐含折旧率。从第6期开始,需要根据上一期余额($ 8,177,480)*本期折旧率(-1.50%)计算余额。我听说过递归CTE,但我对它们不熟悉。
Period DeprRate Balance Comment
1 0% $10,000,000 Actual Values
2 -1.62% $9,838,000 Actual Values
3 -7.41% $9,109,004 Actual Values
4 -8.00% $8,380,284 Actual Values
5 -2.42% $8,177,481 Actual Values
6 -1.50% null should be $8,177,481*(1-.015)
7 -1.50% null should be Pd 6 Calc Balance *(1-.015)
8 -5.73% null should be Pd 7 Calc Balance *(1-.0573)
9 -4.13% null should be Pd 8 Calc Balance *(1-.0413)
10 -1.50% null should be Pd 9 Calc Balance *(1-.015)
CREATE TABLE Table1
([Period] int, [DeprRate] float, Balance integer)
;
INSERT INTO Table1
([Period], [DeprRate], Balance)
VALUES
(1,0,10000000),
(2,-0.0162,9838000),
(3,-0.0741,9109004.2),
(4,-0.08,8380283.864),
(5,-0.0242,8177480.9944912),
(6,-0.015,null),
(7,-0.015,null),
(8,-0.0573,null),
(9,-0.0413,null),
(10,-0.015,null)
答案 0 :(得分:0)
“这似乎相对容易,但无法实现。”
是的。您遵循这些步骤了吗?
“我有10期实际余额和隐含的折旧率。” 步骤1:创建一个表(Table_1)并用这些值填充它。
“从期间11开始,需要根据上一期间余额*当前期间的折旧率计算余额”。 第2步:创建一个查询,以根据上一个表的值来计算新费率,执行该查询并将其填充到新表(Table_2)中。
“如果仅通过使用滞后就可以满足,则第11期并不困难。问题在于,第12-20期需要根据上一期间的计算余额乘以当前期间的折旧率来计算当前期间的余额。” 步骤3:此处有两个选项-一个选项是通过对'Vinit'进行注释的递归查询。另一个选择(简单)是重复步骤2并附加到Table_2 。
=======
尽管您没有在样本数据中包括日期列,但是您应该编写脚本以基于特定日期计算和填充折旧值。您还可以通过指定触发器以及通过作业代理(计划)来安排执行此脚本。
希望这会有所帮助。