基于分组依据/父行的Oracle SQL索引行

基于分组依据/父行的Oracle SQL索引行,sql,oracle,Sql,Oracle,我有一个表,它通过值引用同一个表中的行 示例表: ID PARENT_ID NAME 1 0 john 2 1 jane 3 2 smigy 4 2 gujo 5 1 duby 6 1 ruby 7 5 foo 8 2 bar 9 3 baz 10 3 q

我有一个表,它通过值引用同一个表中的行

示例表:

ID  PARENT_ID   NAME
1   0           john
2   1           jane
3   2           smigy
4   2           gujo
5   1           duby
6   1           ruby
7   5           foo
8   2           bar
9   3           baz
10  3           qux
根父级具有父级0(这样它就不会为null),在本例中

  • 1根父级-父级(0)=1
  • 根父级有1lvl子级-父级(1)=2;5.六,
  • 1lvl子级有2lvl子级-父级(2)=3;4.8.父母(5)=7。父母(6)一无所有
  • 2lvl子级有3lvl子级-父级(3)=9;10父母(4)什么都没有。父母(8)一无所有
  • 没有lvl4儿童或任何深度超过4的儿童
我需要创建一个脚本(大概是SQL查询-需要避免函数/过程/等等),该脚本将根据行在父行下的位置对行进行索引。 就像我选择所有根父级并获取(rownum-1)一样

目标表应如下所示:

ID  PARENT_ID   NAME    ROW_INDEX
1   0           john    0
2   1           jane    0
3   2           smigy   0
4   2           gujo    1
5   1           duby    1
6   1           ruby    2
7   5           foo     0
8   2           bar     2
9   3           baz     0
10  3           qux     1
我计划添加此列,因此查询只执行一次。我已经选择了独立的深度行,但是我真的不知道如何在分组内/分组间计数(即使这是可能的)

另外,如果您能提供更好/更好的列名建议,我们将不胜感激。

用户行号()

select mt.*, row_number() over(partition by parent_id order by id) - 1 as rn
from MyTable mt