重新编号Oracle和SQL Server中的记录

时间:2013-10-17 15:14:43

标签: sql sql-server oracle

我在col1 -

中有一个包含以下值的表格t
1
1
3
4
4
4
5
7
10
13

我需要将其重新编号如下,因此它将消除数字之间的差距。

1
1
2
3
3
3
4
5
6
7

我能找到差距范围。没有找到重新编号的方法 - 尝试使用row_num()应用分析函数但无法获得正确的结果。代码应该在Oracle和SQL Server中都有效,因此connect by级别可能不是最佳方式。

1 个答案:

答案 0 :(得分:3)

看起来像DENSE_RANK,SQL-Server:

WITH CTE AS
(
    SELECT Col1, RANK = DENSE_RANK() OVER (ORDER BY Col1 ASC)
    FROM dbo.Table1
)
UPDATE CTE SET Col1 = RANK 
WHERE Col1 <> RANK 

我不熟悉Oracle(不再)了,但还有Dense_Rank函数。

Demo

COL1
1
1
2
3
3
3
4
5
6
7