SQL 服务器层次结构,为不同的 ID 选择父节点

SQL Server hierarchy, selecting parent nodes for distinct IDs

卡在这个层次结构问题上,所以开始吧。 我有以下层次结构 table,已被截断。

层次结构已与 'codes' 列上的另一个 table 合并,示例结果如下。我们称之为 table1.

对于 table1 中的每个不同 ID,我想利用层次结构查找父级(如果存在)。 例如,在代码列下,18 是 19 的父代。 我想折叠或将 19 与 18 分组并消除该行。 想要的结果是这样的。

这就是我想要的,使用 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

这个 self-join 与 GetAncestor 函数一起完成了我想要它做的事情,'where' 在同一个 ID 上。

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