当前记录计算字段上一个记录的计算值

时间:2018-08-22 16:25:12

标签: sql-server

在此示例中,有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)

1 个答案:

答案 0 :(得分:0)

“这似乎相对容易,但无法实现。”

是的。您遵循这些步骤了吗?

“我有10期实际余额和隐含的折旧率。” 步骤1:创建一个表(Table_1)并用这些值填充它。

“从期间11开始,需要根据上一期间余额*当前期间的折旧率计算余额”。 第2步:创建一个查询,以根据上一个表的值来计算新费率,执行该查询并将其填充到新表(Table_2)中。

“如果仅通过使用滞后就可以满足,则第11期并不困难。问题在于,第12-20期需要根据上一期间的计算余额乘以当前期间的折旧率来计算当前期间的余额。” 步骤3:此处有两个选项-一个选项是通过对'Vinit'进行注释的递归查询。另一个选择(简单)是重复步骤2并附加到Table_2

=======

知识共享/您的问题的增值:折旧是一种会计概念,通常在年末(帐簿关闭)或资产寿命结束时考虑在内。这个概念非常棘手,因为可能必须执行至少两个(通常)不同的计算才能满足税收合规性以及管理会计要求。可能还必须对每种资产进行额外的计算,以便做出决定以确定最佳的选择。

尽管您没有在样本数据中包括日期列,但是您应该编写脚本以基于特定日期计算和填充折旧值。您还可以通过指定触发器以及通过作业代理(计划)来安排执行此脚本。

希望这会有所帮助。