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)
解决方案
“这似乎比较容易,但做不到。”
是的。您是否遵循了这些步骤?
“我有 10 个期间的实际余额和隐含折旧率。” 第 1 步:创建一个表 (Table_1) 并用这些值填充它。
" 从第 11 期开始,需要根据上期余额 * 本期折旧率计算余额。" 第 2 步:根据前一个表的值创建一个计算新费率的查询,执行它并将其填充到新表 (Table_2)。
“如果这就是使用滞后所需要的全部,那么第 11 期并不困难。问题是第 12-20 期需要根据上一期计算的余额乘以当前期间的折旧率计算当前期间的余额。” 第 3 步:这里有两个选项 - 一个是通过“Vinit”评论的递归查询。另一种选择(简单)是重复步骤 2 并附加到 Table_2。
=======
知识共享/对您的问题的增值:折旧是一个会计概念,通常在年终(收账)或资产寿命结束时考虑。这个概念非常棘手,因为可能必须执行至少两个(通常)不同的计算才能满足税收合规性和管理会计要求。可能还必须对每种类型的资产进行额外的计算,以便做出决定以确定可能的最佳选择。
尽管您没有在示例数据中包含日期列,但您应该编写脚本来根据特定日期计算和填充折旧值。您还可以通过指定触发器以及通过作业代理(调度)来安排执行此脚本。
希望这可以帮助。
推荐阅读
- vba - 打开表单以查找 VBA 访问中的特定记录
- math - 3D点云配准中的信息矩阵?
- rust - 为 dyn Fns 实现特征
- python - 关于使用字典而不是使用 Counter(email_lst).most_common() 的问题
- google-cloud-platform - 公开分享自定义图片 FAMILY
- spring-boot - 使用 Spring 的第一步
- java - 使用 tJavaFlex-Kafka 流在 Talend 中处理大量数据
- reactjs - 在异步循环中未从 api 调用接收 id
- python - Munkres Python 包未生成最大总数
- javascript - jQuery '$' 总是未定义的