Приветствую!
Есть таблица T с двумя полями ID и Parent_ID типа nvarchar, где Parent_ID ссылается на ID, ID уникален.
Нужно получить для каждой записи в T значение верхнего узла дерева, у которого Parent_ID is null.
На основе MSDN я соорудил вот такое:
WITH DirectReports(ID, Parent_ID, Sort) AS
(
SELECT ID, Parent_ID, ID
FROM T
WHERE Parent_ID IS NULL
UNION ALL
SELECT e.ID, e.Parent_ID, RTRIM(Sort) + '| ' + e.ID
FROM T e
INNER JOIN DirectReports d
ON e.Parent_ID= d.ID
)
SELECT ID,
CASE WHEN Parent_ID IS NOT NULL THEN SUBSTRING(Sort,1,CHARINDEX('|', Sort)-1) ELSE ID END
FROM DirectReports
ORDER BY Sort
но мне кажется, должны быть варианты и поизящнее.
Может кто сталкивался, задача-то типичная.