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

时间:2018-05-08 20:24:24

标签: sql sql-server database sql-server-2008-r2 row-number

我试图选择特定行号之间的行(例如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 

这篇文章Select subset of rows using Row_Number() 建议ORDER BY id,但我想避免它,并以表数据的自然顺序显示它。

另请查看本文SQL Server 2005 ROW_NUMBER() without ORDER BY,其中建议插入临时表,但由于MatTk表有数百万行,因此它不是一个选项。

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

1 个答案:

答案 0 :(得分:6)

  

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

没有“表格数据的自然顺序”这样的东西 数据库表本质上是无序的。

这意味着从没有order by子句的select语句返回的行是任意排序的(注意任意与random是不同的)。 有关更多信息,请阅读Michael J. Swart的Without ORDER BY, You Can’t Depend On the Order of Results

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

row_number() over(order by (select null))

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