2017-04-26 69 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