2015-04-15 20 views
0

我正在使用Oracle數據庫集成器(ODI)爲新表創建接口。爲Oracle中的每個重複值自動遞增

我想要做的是逐漸增加一個數字,爲​​每個重複出現的另一列中的值。例如,對於表:

Person_ID | ... 
32   | ... 
45   | ... 
32   | ... 
67   | ... 
45   | ... 
45   | ... 

接口將在目標表輸出如下:

Person_ID | Sequence_Number | ... 
32  |  1   | ... 
45  |  1   | ... 
32  |  2   | ... 
67  |  1   | ... 
45  |  2   | ... 
45  |  3   | ... 

我試圖通過進入不同的SQL查詢到在實現文本編輯器來做到這一點映射屬性,但似乎我實際上無法使其逐漸增加。

任何幫助將不勝感激!

回答

3

可以使用row_number(),或rank()over(partition by personId order by personId)

select personId, 
     row_number() over(partition by personId order by personId) Sequence_Number 
from your_table 

編輯:如果要排序的正是像你提到的期望的輸出結果,你需要做的order by rownum兩次,以保證所需的排序:

select personId, 
     row_number() over(partition by personId order by rownum) Sequence_Number 
from your_table 
order by rownum 

下面是上面查詢檢查:


SQL> create table your_table (personId int); 

Table created. 

SQL> insert all 
    2  into your_table values(32) 
    3  into your_table values(45) 
    4  into your_table values(32) 
    5  into your_table values(67) 
    6  into your_table values(45) 
    7  into your_table values(45) 
    8  select * from dual; 

6 rows created. 

SQL> commit; 

Commit complete. 

SQL> select personId, 
    2   row_number() over(partition by personId order by rownum) Sequence_Number 
    3 from your_table; 

    PERSONID SEQUENCE_NUMBER 
---------- --------------- 
     32    1 
     32    2 
     45    1 
     45    2 
     45    3 
     67    1 

6 rows selected. 

SQL> select personId, 
    2   row_number() over(partition by personId order by rownum) Sequence_Number 
    3 from your_table 
    4 order by rownum; 

    PERSONID SEQUENCE_NUMBER 
---------- --------------- 
     32    1 
     45    1 
     32    2 
     67    1 
     45    2 
     45    3 

6 rows selected. 

SQL> drop table your_table; 

Table dropped. 

SQL> 
+0

你可以簡單地做'ORDER BY NULL'或'ORDER BY rownum'在這種情況下 - 我會用'ROW_NUMBER()''以上RANK()'的情況下,有另一列的OP要用於訂購。 –

+0

@DavidFaber,只有一次按rownum命令,不能保證所需的排序,OP需要在'over()'部分執行'兩次'一個命令,另一個在查詢結束時執行,但是感謝你的評論,回答編輯。 – jfun

+0

對,我建議'ORDER BY rownum'只在所需的'ORDER BY'子句中有* something *。我不知道是否有OP的一部分是否需要。 –