我有一些数据驻留在表中,我可以轻松地从中进行选择,并且需要根据前一行的值计算每行的输出值,但第一行除外使用我在初始选择查询中计算的值进行计算。我已经尝试了递归代码的多次迭代,并使用了CTE,但是我一直未能成功实现它。我疯狂地试图让它工作,我宁愿不运行一个循环,因为它需要很长时间才能完成。我们正在运行SQL Server 2012和我写在2014年SSMSSQL-Server递归查询
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次(每次为不同的数据集)滚动,做循环并不快enoug h为我所需要的。
使用LAG/LEAD?这可能比递归cte – dfundako
更容易如果我使用滞后,这不会导致我在查询结束时有8759嵌入式计算吗?意思是,第2行取决于第1行的计算结果,第3行取决于第2行的计算结果,这取决于第1行的计算结果。因此第3行将类似于 'code' select x1 * y1 + x2 * y2 + x3 *(x1 * y1 + x2 * y2 + x3 *(x1 * y1 + x2 * y2 + x3 * ild))'code' 其中第一个圆括号内的x值属于行它是从 –
计算的,使用游标和for循环的过程可能是用于这种级联计算的好方法。 – LukStorms