我有几个表使用ID号加上一个名为xsequence
的列,它们都是主键。目前,我有一堆看起来像这样的数据:
ID_NUMBER,XSEQUENCE
001,2
001,5
001,8
002,1
002,6
我最终需要的是:
ID_NUMBER,XSEQUENCE
001,1
001,2
001,3
002,1
002,2
开始这个的最佳方法是什么?每当我尝试时,我最终都会转动轮子。
答案 0 :(得分:2)
尝试这样的事情:
select id_number,
row_number() over (partition by id_number order by xsequence) new_xsequence
from yourtable
这是一个分析函数,对于这类事情非常方便。使用Partition关键字 - 在每个id_number处“重置”计数器。 (所以1,2,3 ..然后再次开始1,2,3 ...等)。
(分析函数中的Partition关键字与GROUP by keyword非常相似)
[编辑] 要更新原始表,我实际上更喜欢MERGE语句 - 它的语法更简单一些,并且看起来更直观;)
MERGE INTO yourtable base
USING (
select rowid rid,
id_number,
row_number() over (partition by id_number order by xsequence) new_xsequence,
xsequence old_xsequence
from yourtable
) new
ON ( base.rowid = new.rid )
WHEN MATCHED THEN UPDATE
SET base.xsequence = new.new_xsequence
[编辑]