oracle sql基于其他一些列对特定列进行分组

时间:2012-08-29 11:48:59

标签: sql group-by oracle11g sequence

SOURCE_TABLE 
------------
OID EVENT_ID  
1   1111  
2   2222
3   1111  
4   1111  
5   1111  
6   2222  
7   2222  
8   2222  

FINAL_TABLE  
------------
SNO EVENT_ID    OID LINE_NUMBER  
1   1111        1   1  
2   1111        1   2  
3   1111        3   3   
4   1111        3   4  
5   1111        4   5  
6   1111        4   6  
7   1111        5   7  
8   1111        5   8  
9   2222        2   1  
10  2222        2   2  
11  2222        6   3  
12  2222        6   4  
13  2222        7   5  
14  2222        7   6  
15  2222        8   7  
16  2222        8   8

我正在使用Oracle 11g。我想将数据从SOURCE表插入到FINAL表中。在FINAL表中,每个EVENT_ID的行号都必须是唯一的(例如,1111)。

2 个答案:

答案 0 :(得分:3)

假设SNO是Final_Table中的自动增量PK。使用ROW_NUMBER() function

insert into FINAL_TABLE   (EVENT_ID,  OID,  LINE_NUMBER)
  (
    select EVENT_ID,OID,
       ROW_NUMBER() OVER(PARTITION BY EVENT_ID ORDER BY OID) as LINE_NUMBER
    from source_table
  );

答案 1 :(得分:0)

如果我理解正确,你就是在这之后

   SELECT EVENT_ID, OID  ROW_NUMBER()
   OVER (PARTITION BY EVENT_ID,OID ORDER BY OID) AS LINE_NUMBER
   FROM SOURCE_TABLE;