我有一些數據駐留在表中,我可以輕鬆地從中進行選擇,並且需要根據前一行的值計算每行的輸出值,但第一行除外使用我在初始選擇查詢中計算的值進行計算。我已經嘗試了遞歸代碼的多次迭代,並使用了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