TableX
列和值SQL Server的CTE,怎樣才能再次使用CTE表GROUP BY
A B C D E F G H Level
---------------------------------------------------------------------
10 ABC 10 ABC XYZ 2 3 4 1
10 ABC 10 ABC XYZ 2 3 4 1
11 DEF 10 ABC XYZ 4 5 6 2
11 DEF 10 ABC XYZ 6 7 8 2
12 GHI 11 DEF XYZ 7 8 9 3
12 GHI 11 DEF XYZ 8 9 10 3
15 JKL 15 JKL ABC 9 10 11 1
15 JKL 15 JKL ABC 10 11 12 1
16 MNO 15 JKL ABC 13 14 15 2
16 MNO 15 JKL ABC 16 16 18 2
這裏Level
不在表中的列,我只是說爲了清晰,但會被自動由CTE推斷由A,B與C,d
對於等級1進行比較的計算將是
Calc1 = (F + G - H)
Calc2 = Calc1 + G + H
級別2及以後的計算形式烏拉是
CALC1 = SUM(CALC2前一級)的/ 100
CALC2 = CALC1 + G + H - 有這個計算無關
The calculation is cyclic
- 第2級的計算結果將需要被供給到第3級的計算等..
WITH Tiers (
Level,
A,
B,
C,
D,
E,
Calc1,
Calc2)
AS
SELECT 1 AS Level,
A,
B,
C,
D,
E,
F + G - H AS Calc1,
(F + G - H) + G + H AS Calc2
FROM TableX
WHERE A = C
AND B = D
UNION ALL
SELECT tier.Level + 1 AS Level,
A,
B,
C,
D,
E,
/* How can I do this SUM (tier.Calc1)/100 */
/* How can I do this SUM (tier.Calc1)/100 + G + H */
FROM TableX tab
INNER JOIN Tiers tier
ON tab.C = tier.A
AND tab.D = tier.B
AND tab.E = tier.E
WHERE (A <> C
OR B <> D)
)
SELECT *
FROM Tiers
我試圖
SELECT tier.Level + 1 AS Level,
A,
B,
C,
D,
E,
sumCalc.calc1/100 Calc1
sumCalc.calc1/100 + G + H Calc2
FROM TableX tab
INNER JOIN Tiers tier
ON tab.C = tier.A
AND tab.E = tier.B
INNER JOIN (
SELECT A, B, E, SUM(Calc1) Calc1
FROM Tiers
GROUP BY A, B, E) sumCalc /* SQL Server throws error that CTE table cannot be used here */
WHERE (A <> C
OR B <> D)
我也希望使用表值OUTER APPLY或其他東西..
嘗試使用層而不是層 – HLGEM
謝謝,這是一個錯字,更新 – Humble
如果我理解你的問題,你不需要'SUM()'。您只需在CTE的後半部分添加它們即可累積這些值。 'Level'不是'SUM()',它是一系列增加的總和。 – HABO