У меня есть таблица 'temp', в которой столбцы имеют идентификатор и идентификатор его непосредственного родителя. Таблица выглядит следующим образом:
![temp table](https://i.stack.imgur.com/dImoH.jpg)
1
/ \
2 3
/|\ \
4 5 6 7
/
8
Иерархия узлов может быть представлена в древовидной структуре, как указано выше.
Теперь я хочу перечислить все предки или родительские узлы каждого узла, присутствующего на всех уровнях в сводной таблице, используя рекурсивный cte , который имеет уровни (например, Level1, Level2 и т. Д.) Как его атрибуты. Чтобы получить этот вывод, я вычислил все родительские узлы в неповоротной таблице с уровнем каждого узла относительно его родителя. sql запрос, для которого ниже:
WITH ctetable as
(
SELECT S.id, S.parent, 1 as level
FROM temp as S where S.parent is not null
UNION ALL
SELECT S2.id, p.parent, p.level + 1
FROM ctetable AS p JOIN temp as S2 on S2.parent = p.id
)
SELECT * FROM ctetable ORDER BY id;
Вывод вышеуказанного запроса показан ниже:
![cte output](https://i.stack.imgur.com/DldmW.jpg)
Но Я хочу развернуть рекурсивный cte, который содержит родительский идентификатор на каждом уровне определенного узла. Скажем, для id = 4 он должен отображать родительские идентификаторы 4, 2 и 1 под Level3, Level2 и Level1 соответственно. Для этого я написал следующий запрос:
WITH ctetable as
(
SELECT S.id, S.parent, 1 as level
FROM temp as S where S.parent is not null
UNION ALL
SELECT S2.id, p.parent, p.level + 1
FROM ctetable AS p JOIN temp as S2 on S2.parent = p.id
)
SELECT
myid,
[pn].[1] AS [Level1],
[pn].[2] AS [Level2],
[pn].[3] AS [Level3]
FROM
(
SELECT [a].id,
[a].id as myid,
[a].level
FROM ctetable AS [a]
) AS [hn] PIVOT(max([hn].id) FOR [hn].level IN([1],[2],[3])) AS [pn]
Но выходная таблица не является желаемой, так как она содержит тот же идентификатор, повторяемый как родительский идентификатор на каждом уровне для определенного узла, вместо этого она должна содержать все родители этого узла под различными уровнями. Вывод, который я получил после выполнения вышеуказанного запроса, показан ниже:
![main output](https://i.stack.imgur.com/VbHbk.jpg)
Может кто-нибудь помочь мне с этим ....