的最深層次我使用SQLServer的2008年如何獲得分層SQL查詢
說我有一個遞歸層次結構表,SalesRegion,白衣SalesRegionId和ParentSalesRegionId。我需要的是,給定一個特定的SalesRegion(層次結構中的任何位置),檢索BOTTOM級別的所有記錄。
IE: SalesRegion,ParentSalesRegionId
1,空
1-1,1
1-2,1
1-1-1 1-1
1-1-2,1-1
1-2-1,1-2
1-2-2,1-2
1-1-1-1,1-1-1
1-1-1-2,1-1-1
1-1-2-1,1-1-2
1-2-1-1,1-2-1
(在我的表我有序貫號碼,這個虛線數字只清除)
因此,如果用戶輸入1-1,我需要使用SalesRegion 1-1-1-1或1-1-1-2或1-1-2-1(而不是1-2-2-2)檢索al記錄)。同樣,如果用戶輸入1-1-2-1,我需要檢索只是1-1-2-1
我有一個CTE查詢檢索1-1以下的所有內容,但包括我不喜歡的行'不想要:
WITH SaleLocale_CTE AS (
SELECT SL.SaleLocaleId, SL.SaleLocaleName, SL.AccountingLocationID, SL.LocaleTypeId, SL.ParentSaleLocaleId, 1 AS Level /*Added as a workaround*/
FROM SaleLocale SL
WHERE SL.Deleted = 0
AND (@SaleLocaleId IS NULL OR SaleLocaleId = @SaleLocaleId)
UNION ALL
SELECT SL.SaleLocaleId, SL.SaleLocaleName, SL.AccountingLocationID, SL.LocaleTypeId, SL.ParentSaleLocaleId, Level + 1 AS Level
FROM SaleLocale SL
INNER JOIN SaleLocale_CTE SLCTE ON SLCTE.SaleLocaleId = SL.ParentSaleLocaleId
WHERE SL.Deleted = 0
)
SELECT *
FROM SaleLocale_CTE
在此先感謝!
亞歷杭德羅。
是否有最大深度4?如果是這樣,那麼這也是任何分支的最小最終深度? – 2012-02-09 22:09:49
@Norla Nope,層數的最大數目是未知的......但我確實需要最後一層的任何東西,我會編輯這個問題來說明問題。謝謝! – 2012-02-09 22:13:35
如果*您有調整結構的奢侈*,您可能需要考慮HierarchyID數據類型。它使這樣的查詢變得簡單(並且通常更快)。類似於'select ... from SL where myHierarchy.IsDecendantOf(@value)'或myHerarchyID.GetDescendant(@ child1,@ child2)。 – EBarr 2012-02-09 22:24:23