首页 > 解决方案 > 如何在 SQL 中压缩数字列表

问题描述

我有一张桌子,有一int列。这些数字都是唯一的,但并非都存在于从最小 (1) 到最大的范围内。我想“压缩”数字列表,以便列表中的最大数字是列表中COUNT的数字,并且记录保持相同的相对顺序(将其视为身份列,但实际上是't)。所以例如,如果我有数字

1 3 5 6 10 11 14 15 20 30

我希望他们重新编号

1 2 3 4 5 6 7 8 9 10

3 变成了 2,5 变成了 3,等等。我怎样才能在 T-SQL 中做到这一点?

标签: sql-servertsql

解决方案


我猜你只需要 row_number()

    SELECT row_number() 
     over
  (partition by column order by column 
   asc) rn from table;

推荐阅读