首页 > 解决方案 > 先前记录计算值上的当前记录计算字段

问题描述

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

标签: sql-server

解决方案


“这似乎比较容易,但做不到。”

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

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

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

“如果这就是使用滞后所需要的全部,那么第 11 期并不困难。问题是第 12-20 期需要根据上一期计算的余额乘以当前期间的折旧率计算当前期间的余额。” 第 3 步:这里有两个选项 - 一个是通过“Vinit”评论的递归查询。另一种选择(简单)是重复步骤 2 并附加到 Table_2

=======

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

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

希望这可以帮助。


推荐阅读