1

我有一个表 t,其中包含以下值col1-

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级别可能不是最好的方法。

4

1 回答 1

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
于 2013-10-17T15:18:13.397 回答