基于group by / parent行的Oracle SQL索引行

时间:2017-04-26 08:24:17

标签: 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           qux

root-parent有父0(只是因为它不会为null),在这种情况下有

  • 1 root-parent - parent(0)= 1。
  • root-parent有1lvl孩子 - parent(1)= 2; 5; 6.
  • 1lvl children有2lvl children - parent(2)= 3; 4; 8。母体(5)= 7。父母(6)什么都没有。
  • 2lvl儿童有3个孩子 - 父母(3)= 9; 10。父母(4)什么都没有。父母(8)什么都没有。
  • 没有lvl4儿童或深度超过4的任何东西。

我需要创建一个脚本(可能是SQL查询 - 需要避免函数/过程/等),它会根据行在父项下的位置来索引行。 就像我选择所有root-parent's并得到(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

我正在计划添加此列,因此查询将只执行一次。我通过选择单独的深度行来玩,但后来我真的不知道如何计算内部/组间(即使可能)。

P.S。一个更好/更好的列名称建议也将非常感激。

1 个答案:

答案 0 :(得分:2)

用户row_number()

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