我想使用一個CTE內聯,就像一個函數,但我不能創建一個函數,因爲我只能讀取數據庫的訪問權限。還有其他的方法可以簡單地做到嗎?在SQL中內聯使用輸出CTE?
查詢:
SELECT SuiteID,ParentSuiteID FROM tbl_Suite;
中的結果是這樣的:
SuiteID ParentSuiteID 1 0 4 1 5 4 6 4 7 4 8 4 9 4 10 4 11 4
現在我要尋找其中一個結果:
SuiteID ParentSuiteID Level1ParentID 1 0 0 4 1 0 5 4 1 6 4 1 7 4 1 8 4 1 9 4 1 10 4 1 11 4 1與下面的CTE
,我能取得Level1Parent,如果我通過SuiteID
;WITH HIERARCHY AS
(select T1.SuiteID,T1.Title,T1.ParentSuiteID, 0 Level FROM tbl_Suite(nolock) T1
Where T1.ParentSuiteID = 0 AND T1.PlanID = '404'
UNION ALL
select T2.SuiteID,T2.Title,T2.ParentSuiteID,Level+1
from tbl_Suite(nolock) AS T2
INNER JOIN HIERARCHY AS H
ON T2.ParentSuiteID = H.SuiteID
)
,CTE_A(SuiteID,Title,ParentSuiteID,Level) AS
(
select H2.SuiteId, H2.Title, H2.ParentSuiteId, H2.Level
from Hierarchy H2
--INNER JOIN #X_Temp X
--ON H2.SuiteID = X.SuiteID
where H2.SuiteID = 10820
UNION ALL
select H2.SuiteId, H2.Title, H2.ParentSuiteId, H2.Level
from Hierarchy H2 JOIN CTE_A On H2.SuiteID = CTE_A.ParentSuiteID
)
SELECT SuiteID FROM CTE_A WHERE level = 1
我的問題是:
A)我如何通過SuiteID作爲內聯子查詢遞歸查詢CTE? B)如何組合如上所示的結果集?
在繼續亂拋垃圾查詢之前,您可能需要仔細閱讀本文。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –
真正有幫助的是,如果您可以爲您的表和樣本數據提供ddl以及所需的輸出。因爲現在第一個查詢過於冗長而且難以辨認,而且我不清楚你想要做什麼。這將是一個很好的開始。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
嗨,肖恩,在第一個查詢中我試圖獲取結果集上我打算申請聚合。只有列SuiteID對於此查詢非常重要,因爲它具有父級子關係,所以我需要爲每個SuiteID找到第二級父級,這是以下CTE所做的。我無法做的就是將這兩個代碼組合成一個輸出作爲單個結果集。 – Sharktooth