Oracle: Updating a table column using ROWNUM in conjunction with ORDER BY clause

后端 未结 4 490
野的像风
野的像风 2020-12-01 12:45

I want to populate a table column with a running integer number, so I\'m thinking of using ROWNUM. However, I need to populate it based on the order of other columns, someth

4条回答
  •  南方客
    南方客 (楼主)
    2020-12-01 13:21

    This should work (works for me)

    update table_a outer 
    set sequence_column = (
        select rnum from (
    
               -- evaluate row_number() for all rows ordered by your columns
               -- BEFORE updating those values into table_a
               select id, row_number() over (order by column1, column2) rnum  
               from table_a) inner 
    
        -- join on the primary key to be sure you'll only get one value
        -- for rnum
        where inner.id = outer.id);
    

    OR you use the MERGE statement. Something like this.

    merge into table_a u
    using (
      select id, row_number() over (order by column1, column2) rnum 
      from table_a
    ) s
    on (u.id = s.id)
    when matched then update set u.sequence_column = s.rnum
    

提交回复
热议问题