1
我有簡單的查詢CTE SQL查詢得到完整路徑
WITH conn_cte (ParentCategoryId, CategoryId, IdsPath)
AS (SELECT ParentCategoryId
,CategoryId
,CAST(ParentCategoryId AS varchar(1000))
FROM Ind_CategoriesConnections
WHERE ParentCategoryId = 0
UNION ALL
SELECT cc.ParentCategoryId
,cc.CategoryId
,CAST(IdsPath + ','
+ CAST (cc.ParentCategoryId AS varchar(5)) AS varchar(1000))
FROM Ind_CategoriesConnections AS cc
INNER JOIN conn_cte AS conn ON conn.CategoryId = cc.ParentCategoryId
AND cc.categoryid NOT IN (
SELECT conn.Categoryid)
)
SELECT x.*
FROM (SELECT t.ParentCategoryId
,t.CategoryId
,t.IdsPath + ',' + CAST(t.CategoryId AS varchar(5)) AS [path]
FROM conn_cte t
INNER JOIN Ind_Categories c ON t.CategoryId = c.CategoryId
AND c.CategoryViewId = 1
AND c.IsActiveYN = 1
) x
ORDER BY x.path
我在查詢(最佳),有趣的是,只有從根返回完整路徑葉。
例如結果的部分是
Parent Child Path
12 16 0,8,12,16
16 17 0,8,12,16,17
17 18 0,8,12,16,17,18
17 19 0,8,12,16,17,19
零爲根18,19葉子(和孩子),我想忽略像0,8,12,16
和0,8,12,16,17
部分路徑,並獲得唯一的全路徑(與葉子結束) 0,8,12,16,17,18
和0,8,12,16,17,19
但請記住,如果你有0,8,12,16,17,183 - 這可能會讓你四處奔波。您可能希望更早地使用逗號,以便您的路徑看起來像'0,8,12,16,17,18,' – 2010-01-04 23:15:05