я получил простой запросКТР 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,' –