sql - 使用不带 ORDER BY ID 的 Row_Number() 选择行

标签 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 排序且不创建临时表的情况下按行号查询行?

最佳答案

This article Select subset of rows using Row_Number() suggests ORDER BY id but I want to avoid it and show it in the natural order of the table data.

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

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

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

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

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

关于sql - 使用不带 ORDER BY ID 的 Row_Number() 选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50241753/

相关文章:

mysql - 使 UNIQUE KEY 与查询相关

SQL Server 反向运行总计

javascript - 为什么我不能动态绘制表格?我怎样才能画出 table ?

sql - 索引是否计入SQL Server Express的10gb数据库大小限制?

mySQL, 三张表 : UPDATE multiple rows (each with a different value)

mysql - 选择在其他表中有不止一次经验的用户

android - 移动应用程序 - 还记得独特的设备吗?

sql-server - 如何使用 JPA/Hibernate 设置 XACT_ABORT?

sql - 计算 SQL 中 CRON 表达式的下一次运行时间

database - 有没有类似 git 的数据库?