Есть три проблемы с тем, что вы отправили:
WITH OwnerHierarchy AS (
SELECT a.pairid,
a.childid,
a.parentid,
0 AS level
FROM BusinessHierarchy a
WHERE a.parentid IS NULL -- Point #1, see below
UNION ALL
SELECT b.PairID,
b.ChildID,
b.ParentID,
oh.level + 1 AS level
FROM BusinessHierarchy AS b
JOIN OwnerHierarchy oh ON oh.childid = b.parentid) -- Points #2 & 3, see below
SELECT x.PairID,
x.ChildID,
x.ParentID,
x.level
FROM OwnerHierarchy x
ORDER BY x.level, x.ChildID, x.ParentID
Очки:
- В верхней части UNION отсутствует то, что определяет корневые узлы / записи / строки. Я предположил, надеюсь, правильно ...
- Вы присоединяли
BusinessHierarchy
к себе, когда ссылкой должно быть имя CTE
- Соотношение между CTE и исходной таблицей должно быть правильным и в правильном направлении
Реквизиты для использования псевдонимов таблиц, но они не использовались последовательно, и они должны быть максимально краткими. Вам не нужно использовать AS
при их определении, просто вопрос стиля в этой части.
Заключение
Я думаю, псевдонимы таблиц будут иметь дело с тем, что столбец level
не найден, но не на 100%.