【问题标题】:oracle sql to group specific column based on some other columnoracle sql根据其他列对特定列进行分组
【发布时间】:2012-08-24 00:32:02
【问题描述】:
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)。

【问题讨论】:

    标签: sql group-by oracle11g sequence


    【解决方案1】:

    假设 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
      );
    

    【讨论】:

    • 谢谢@Valex。如果我只从一张表中选择,它工作正常。但实际上我正在尝试从 4 个表中获取数据。另一个表也只有在 source_table 中存在 EVENT_ID 和 OID。如果我按如下方式重写查询,则它不起作用。 select s.EVENT_ID, s.OID, ROW_NUMBER() OVER(PARTITION BY "s.EVENT_ID" ORDER BY "s.OID") as LINE_NUMBER from source_table s请帮帮我。
    • 只需从ROW_NUMBER() OVER(PARTITION BY s.EVENT_ID ORDER BY s.OID) 中删除" 符号
    【解决方案2】:

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

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

    【讨论】:

    • 感谢@ClearLogic。如果我只从一张表中选择,它工作正常。但实际上我正在尝试从 4 个表中获取数据。另一个表也只有在 source_table 中存在 EVENT_ID 和 OID。如果我按如下方式重写查询,则它不起作用。 select s.EVENT_ID, s.OID, ROW_NUMBER() OVER(PARTITION BY "s.EVENT_ID" ORDER BY "s.OID") as LINE_NUMBER from source_table s请帮帮我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多