Я пытаюсь написать рекурсивный запрос CTE в SQL Server 2005, но получаю нечетный набор результатов. Моя таблица:SQL-рекурсивный запрос CTE, набор нечетных результатов SQL Server 2005
PairID ChildID ParentID
900 1 2
901 2 3
902 3 4
Это мой КТР запрос:
WITH TESTER (PairID,
ChildID,
ParentID,
Level)
AS (SELECT a.PairID, a.ChildID,a.ParentID, 0 AS Level
FROM BusinessHierarchy AS a
UNION ALL
SELECT b.PairID, b.ChildID, b.ParentID, oh.Level + 1 AS Level
FROM BusinessHierarchy AS b INNER JOIN
TESTER AS oh ON b.ChildID = oh.ParentID)
SELECT
x.PairID,
x.ChildID,
x.ParentID,
x.Level
FROM TESTER AS x
ORDER BY x.Level, x.ChildID, x.ParentID
Хорошо, так что я теперь получаю возврат набора данных, однако, не как ожидалось, что он содержит повторение в следующем Способ:
PairID ChildID ParentID Level
900 1 2 0
901 2 3 0
902 3 4 0
...
900 2 3 1
901 3 4 1
...
900 3 4 2
Если кто-то может объяснить мне, почему это происходит, и как бы я мог исправить это, я был бы очень благодарен.
Насколько идет мой последний вопрос, как бы я изменить его, чтобы отобразить первоначальный childID с каждым из родителей, как это:
Original
PairID ChildID ParentID Level
900 1 2 0
901 2 3 1
902 3 4 2
I want it displayed as:
PairID ChildID ParentID Level
900 1 2 0
901 1 3 1
902 1 4 2
Я выполнил запрос, но не получил никаких результатов. Я думаю, проблема в том, что «parentId is null», поэтому я выбрал его из моей версии. Я прочитал несколько форумов и версий/примеров и просто не понимаю, почему это не работает. – flavour404
В моем коде предполагается, что вы добавите запись с идентификатором 4. Если вы этого не сделаете, вы должны иметь отправную точку другим способом. –
См. Мой измененный ответ, который будет работать в вашем случае (я вернулся к таблице, чтобы увидеть, где не было дочерней записи). –