這個問題被問一些其他的時間,但我還是沒能理清正確答案或正確的方式做到這一點:如何巢CTE正確
...
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv](A, B, C, D) AS 'Loss'
FROM CTE
WHERE (Loss >= @MinRetention)
這不起作用,我不能創建存儲過程,顯然我不能在WHERE中使用Loss,因爲在該範圍中不存在。
我想用另一個CTE來包裝這一塊,所以我可以把WHERE在外之一,但不是似乎並沒有工作,嘗試這樣做:
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv(A, B, C, D) AS 'Loss'
FROM CTE,
RESULTS AS
(SELECT * FROM CTE)
SELECT *
FROM RESULTS
WHERE (Loss >= @MinRetention)
但它不能在SQL編譯服務器,我得到一個錯誤,'('錯位多行上面,但無關,如果我刪除第二個CTE它工作正常。
我只想避免代碼重複,不想打電話給我[ udf_BetaInv]兩次在選擇和也在哪裏。
你是指'[Loss]'(列名)而不是'Loss'(一個字符串)?不知道是否會導致錯誤,儘管 – Rup