Bạn cần sử dụng một biểu thức bảng chung đệ quy, sau đó lọc kết quả chỉ để tìm đường dẫn cơ sở cho mỗi bản ghi, (tức là đối với ID 1131, hãy lấy ABC/RST/UVW
và không chỉ ABC/RST
WITH CTE AS
( SELECT ID,
Name,
ParentID,
NextParentID = ParentID,
Path = CAST(Name AS VARCHAR(MAX)),
Recursion = 1
FROM T
UNION ALL
SELECT CTE.ID,
CTE.Name,
CTE.ParentID,
T.ParentID,
CAST(T.Name + '/' + CTE.Path AS VARCHAR(MAX)),
Recursion + 1
FROM CTE
INNER JOIN T
ON CTE.NextParentID = T.ID
), CTE2 AS
( SELECT CTE.ID,
CTE.Name,
CTE.ParentID,
CTE.Path,
RowNumber = ROW_NUMBER() OVER(PARTITION BY CTE.ID ORDER BY Recursion DESC)
FROM CTE
)
SELECT ID, Name, ParentID, Path
FROM CTE2
WHERE RowNumber = 1;