2017-04-26 57 views
1

我有1个表,它是指按值的行中相同的表的Oracle SQL索引行上按/父行

实施例的表:

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 (只是所以它不会为空),在这种情况下,有

  • 1 root-parent-parent(0)= 1。
  • 根 - 父母有1lvl孩子 - 父母(1)= 2; 5; 6。父母(2)= 3; 4; 8 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 

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

P.S.更好/好的专栏名称建议也将非常感激。

回答

2

用户ROW_NUMBER()

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