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 に答える