Иерархия SQL Server, выбор родительских узлов для разных идентификаторов

Застрял на этой проблеме иерархии, так вот. У меня есть следующая таблица иерархии, которая была усечена.

Иерархия SQL Server, выбор родительских узлов для разных идентификаторов

Иерархия была присоединена к другой таблице в столбце «коды» со следующим примером результата. Назовем эту таблицу1.

Иерархия SQL Server, выбор родительских узлов для разных идентификаторов

Для каждого отдельного идентификатора в таблице 1 я хочу использовать иерархию для поиска родителя, если он существует. Например, в столбце кодов 18 является родителем 19. Я хотел бы сложить или сгруппировать 19 с 18 и исключить этот ряд. Желаемый результат примерно такой.

Иерархия SQL Server, выбор родительских узлов для разных идентификаторов

Это делает то, что я хочу, используя метод GetAncestor:

SELECT A.OrgNode, A.Codes, A.ID, B.OrgNode, B.Codes, B.ID FROM table1 A INNER JOIN table1 B ON A.OrgNode.GetAncestor(1) = B.OrgNode WHERE A.ID = B.ID

Я думаю, вам лучше опубликовать некоторые ожидаемые результаты, так как я не могу понять ваше описание.

TomC 28.06.2019 07:57

Я не могу понять, как получить эти желаемые результаты из этого примера данных. Можете ли вы объяснить, как вы, как человек, получаете значения во второй строке желаемого результата? Это кажется совершенно произвольным. Вы говорите: «Я хочу применить HierarchyID», но что значит «применить» «HierarchyID» и что такое «HierarchyID», поскольку в ваших данных нет такого столбца? Затем вы говорите «с родителем для этих кодов». Где в этих данных «родитель», какие «коды»?

JNevill 28.06.2019 14:21

Извиняюсь. Плохо написано с моей стороны. Обновленный вопрос.

user2923767 28.06.2019 16:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
3
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это самосоединение с функцией GetAncestor сделало то, что я хотел, с «где» на том же идентификаторе.

SELECT A.OrgNode, A.Codes, A.ID, B.OrgNode, B.Codes, B.ID FROM table1 A INNER JOIN table1 B ON A.OrgNode.GetAncestor(1) = B.OrgNode WHERE A.ID = B.ID

Другие вопросы по теме