【发布时间】:2017-01-20 22:16:38
【问题描述】:
我有以下类型的数据集:
Base Col1 Col2 Col3
1000 0 10 1100
1100 0 10 1210
1210 0 10 1331
为了推导col3,我将使用像
这样的公式col3 = (base - col1) * (1 + col2 / 100)
如果您观察上述数据集,第一行 col3 值是第二行基列值。所有记录的 Col2 值都相同。
所以现在我的问题是稍后我的 col1(Col1 列是公式的一部分)行值将基于此更新,我需要使用提到的公式重新计算 col3 值。
例如看下面的数据集,如果 col1 值有更新,那么我们需要使用公式 (Col3=(base-col1)*(1+col2/100)) 重新计算 col3 值,如下所示
Base Col1 Col2 Col3
1000 10 10 1089
1089 20 10 1175.9
1175.9 30 10 1293.4
为了获得以上数据集,我已经尝试如下。
SELECT
col1, col2,
col3 - SUM(col1 * (Power((1 + COL2 / 100.00), RNO)))
OVER(ORDER BY RNO ROWS UNBOUNDED PRECEDING)
FROM
(SELECT
row_number() OVER(ORDER BY col1) rno,
*
FROM
#TABLE1) A
但我没有得到正确的结果。
请使用以下脚本创建表格和填充数据。
CREATE TABLE #Table1
(
[col1] INT,
[col2] INT,
[col3] INT
);
INSERT INTO #Table1
([col1],
[col2],
[col3])
VALUES (10,10, 1100),
(20,10,1210),
(30,10,1331);
注意:- 在我的示例中,基值始终取决于前一行 col3 值。
请帮帮我。
【问题讨论】:
-
如果 col3 中的值是实际计算的,并且应该与 col1 和 col2 中的值一起改变,为什么不使用computed column?
-
@Shnugo 我认为计算列将不起作用,因为我的基列值总是会改变。这取决于上一行 col3。
-
啊,我明白了,你正在重新发明 Excel :-) 开个玩笑:Thorsten Kettner 的第一句话是真的:你不应该将计算结果存储在你的表中(唯一的例外:实际性能问题)。
-
你解决了吗?你找到有用的答案了吗?
标签: sql sql-server tsql sql-server-2012