首页 > 解决方案 > 从主节点和级别节点构建层次结构表

问题描述

我想从如下所示的数据构建一个子父链接:

id_node 主节点 等级
A9 A9 0
92 A9 1
923 A9 2
9234 A9 3

有没有一种简单的方法来反转这个表并为每一行添加父 id 并得到这样的东西:

id_node 主节点 等级 父母
A9 A9 0 无效的
92 A9 1 A9
923 A9 2 92
9234 A9 3 923

我不是要遍历每个 id,我想知道是否有类似this的方法,但有点还原。

标签: sqlsql-serverhierarchyhierarchical-datahierarchical

解决方案


您可以使用join

select t.*, tparent.id_node as parent
from t left join
     t tparent
     on tparent.main_node = t.main_node and
        tparent.level = t.level - 1;

您还可以使用lag()

select t.*,
       lag(id_node) over (partition by main_node order by level) as parent
from t

推荐阅读