SQL Server ROW_NUMBER函数不从1开始

jhdbpxl9  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(329)

我想问一下在SQL Server中使用ROW_NUMBER()函数时的奇怪行为。通常它应该从1开始,并在Order By子句中按所选列对值排序,这在大多数情况下都能正常工作,但当我使用基本的Select语句时,我有一个特殊的情况:

SELECT 
    ROW_NUMBER() OVER (ORDER BY VIN) AS RN,
    * 
FROM dbo.RawData

我得到了这样的结果:

RN      VIN
6301    JTEBR3FJ00K096082
6302    JTEBR3FJ00K096132
6303    JTEBR3FJ00K096146
6304    JTEBR3FJ00K096163
6305    JTEBR3FJ00K096180
6306    JTEBR3FJ00K096275
1801    5TDDZRFHX0S820530
1802    5TDDZRFHX0S824111
1803    5TDDZRFHX0S824500
1804    5TDDZRFHX0S825971
1805    5TDDZRFHX0S826456

这些是返回表的第一列,整个ROW_NUMBER函数随机工作,从6301到6306的链之后,从1801到1940的链开始等等。
VIN列(我排序数据所依据的列)设置为nvarchar(17)
您能帮忙解决一下这个情况下可能出现的问题吗?
如果你能告诉我哪里出了问题我会很感激的

sr4lhrrt

sr4lhrrt1#

您可以使用ORDER BY以所需的方式对行进行排序:

SELECT ROW_NUMBER() OVER (ORDER BY VIN) AS RN
      ,* 
FROM dbo.RawData
ORDER BY RN;

由于row_number是在SELECTE中计算的,因此可以在ORDER BY子句中使用它的值,而不需要嵌套查询。

相关问题