我想问一下在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)
您能帮忙解决一下这个情况下可能出现的问题吗?
如果你能告诉我哪里出了问题我会很感激的
1条答案
按热度按时间sr4lhrrt1#
您可以使用ORDER BY以所需的方式对行进行排序:
由于
row_number
是在SELECTE中计算的,因此可以在ORDER BY
子句中使用它的值,而不需要嵌套查询。