【问题标题】:Build hierarchy table from main nodes and level nodes从主节点和级别节点构建层次结构表
【发布时间】:2021-05-20 11:47:05
【问题描述】:

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

id_node main_node level
A9 A9 0
92 A9 1
923 A9 2
9234 A9 3

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

id_node main_node level parent
A9 A9 0 NULL
92 A9 1 A9
923 A9 2 92
9234 A9 3 923

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

【问题讨论】:

  • left(id_node, len(id_node) - 1)?您还需要考虑到A
  • 我应该提到我正在寻找一种解决方案,无论其背后的价值观和逻辑如何。例如,id 9234 可以在明天被 ZZ2 替换。
  • 那你建议如何识别直系父母?
  • 我在想如果有一个公式可以从一个完整的表中获取一行的节点级别,那么可能有一种方法可以从根 id + 节点级别构建表
  • 仍然不确定我明白你的意思,请描述确切的逻辑。记住表格没有内在的顺序,你需要给一个order by

标签: sql sql-server hierarchy hierarchical-data hierarchical


【解决方案1】:

你可以使用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

【讨论】:

  • 谢谢,我不知道我们可以在连接条件中使用加法或减法等操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多