我有一些数据驻留在一个表中,我可以轻松地从中选择,并且我需要根据前一行的值计算每行的输出值,但第一行除外,它是使用值计算的我最初在选择查询中计算。我尝试了递归代码的多次迭代并利用 CTE,但未能成功使其正常工作。我想让自己发疯,试图让它工作,我宁愿不运行循环,因为它需要很长时间才能完成。我们正在运行 sql server 2012,我正在 SSMS 2014 中编写代码。
select 1 as rn, 1.5 x1, 2.5 x2, 2.0 x3, 45 y1, 42 y2, 43 ild into #x
union all
select 2 as rn, 1.7 x1, 2.2 x2, 2.1 x3, 55 y1, 12 y2, 43 ild
计算第一行的代码是
select x1*y1 + x2*y2 + x3 * ild from #x where rn = 1
计算第二行到第n行的代码是
select x1*y1 + x2*y2 + x3 * (previous row's calculated value)
请告诉我是否缺少某些内容,因为我有 8760 行数据,需要滚动 57 次(每个数据集都是不同的数据集),并且循环速度不足以满足我的需要它是为了。
最佳答案
这是一个递归cte,但我无法谈论87,000行的性能
;with cte as (
Select rn ,Calc = cast( x1*y1 + x2*y2 + x3 * ild as money) from #x Where rn=1
Union All
Select r.rn,cast(r.x1*r.y1 + r.x2*r.y2 + r.x3 * p.Calc as money)
From #x r
Join cte p on r.rn=p.rn+1
)
Select * from cte
Option (MAXRECURSION 0)
返回
rn Calc
1 258.50
2 662.75
我应该注意:我假设 RN 是增量的,没有间隙
关于SQL Server 递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679865/