使用带有ORDER BY ID的Row_Number()选择行

Ran*_*aul 1 sql database sql-server row-number sql-server-2008-r2

我正在尝试选择特定行号之间的行(例如1到50或51到10等).

下面是我的表MatTk模式,所有列都允许空值:

tk_id [varchar(50)] | mat_id [varchar(50)] | ven_id [varchar(50)] | tk_rate [money]
   1023                     104                     2212               120.11 
Run Code Online (Sandbox Code Playgroud)

本文使用Row_Number()建议选择行的子集ORDER BY id但我想避免它并以表数据的自然顺序显示它.

另请查看本文SQL Server 2005 ROW_NUMBER(),不带ORDER BY,建议插入临时表,但它不是一个选项,因为该MatTk表有数百万行.

有没有办法按行号查询行而不按ID排序而不创建临时表?

Zoh*_*led 6

本文使用Row_Number()选择行的子集建议使用ORDER BY id但我想避免它并以表数据的自然顺序显示它.

没有 "表数据的自然顺序" 这样的东西.
数据库表本质上是无序的.

这意味着从没有order by子句的select语句返回的行是任意排序的(注意任意与random是不同的).有关更多信息,请阅读Michael J. Swart的" 无顺序",您不能依赖于结果顺序

如果您不关心row_number函数中数字的顺序,则可以使用

row_number() over(order by (select null))
Run Code Online (Sandbox Code Playgroud)

但是请注意,使用它会返回任意行号 - 这意味着每次运行查询时都不能信任它们保持不变.

  • @JeremiahCooper这就是我的答案的全部内容......我看到我需要让它更清晰.编辑. (5认同)