Sql 使用按ID排序的行号()选择行
我试图在特定行号之间选择行(如1到50或51到10等) 下面是我的表Sql 使用按ID排序的行号()选择行,sql,sql-server,database,sql-server-2008-r2,row-number,Sql,Sql Server,Database,Sql Server 2008 R2,Row Number,我试图在特定行号之间选择行(如1到50或51到10等) 下面是我的表MatTkschema,所有列都允许空值: tk_id [varchar(50)] | mat_id [varchar(50)] | ven_id [varchar(50)] | tk_rate [money] 1023 104 2212 120.11 本文建议按id排序,但我希望避免这种情况,并以表数据的自然顺
MatTk
schema,所有列都允许空值:
tk_id [varchar(50)] | mat_id [varchar(50)] | ven_id [varchar(50)] | tk_rate [money]
1023 104 2212 120.11
本文建议按id排序,但我希望避免这种情况,并以表数据的自然顺序显示它 还可以查看这篇文章,它建议插入临时表,但这不是一个选项,因为
MatTk
表有数百万行
有没有一种方法可以在不按ID排序和不创建临时表的情况下按行号查询行
本文使用Row_Number()选择行的子集建议按id排序,但我希望避免这种情况,并以表数据的自然顺序显示它
没有“表数据的自然顺序”这样的东西。
数据库表本质上是无序的。 这意味着从select语句返回的行(没有
order by
子句)是任意排序的(请注意,任意与随机不同)。
有关更多信息,请阅读Michael J.Swart的
如果不关心行数
函数中的数字顺序,可以使用
row_number() over(order by (select null))
但是,请注意,使用它将返回任意行号,这意味着不能相信它们在每次运行查询时都保持不变
本文使用Row_Number()选择行的子集建议按id排序,但我希望避免这种情况,并以表数据的自然顺序显示它
没有“表数据的自然顺序”这样的东西。
数据库表本质上是无序的。 这意味着从select语句返回的行(没有
order by
子句)是任意排序的(请注意,任意与随机不同)。
有关更多信息,请阅读Michael J.Swart的
如果不关心行数
函数中的数字顺序,可以使用
row_number() over(order by (select null))
但是,请注意,使用此选项将返回任意行号-这意味着不能相信它们在每次运行查询时都保持不变。您必须按某个内容排序-您希望按哪一列排序?排序依据(选择null)“表数据的自然顺序”。我认为您不理解关系数据库中的一个基本概念。桌子乱七八糟。没有排序依据的结果集是无序的。集合没有“自然顺序”。不,不会发生。根据定义,表是无序集。当我们选择数据时,顺序的概念就出现了。即使是@JohnCappelletti的“黑客”也不会长期奏效。在你认为这是一个有效的方法,以确保订购的链接我张贴在上面。它将工作一段时间,但在某个时候它将不再工作。您必须按某种方式排序-您要按什么列排序?按顺序(选择null)“表数据的自然顺序”。我认为您不理解关系数据库中的一个基本概念。桌子乱七八糟。没有排序依据的结果集是无序的。集合没有“自然顺序”。不,不会发生。根据定义,表是无序集。当我们选择数据时,顺序的概念就出现了。即使是@JohnCappelletti的“黑客”也不会长期奏效。在你认为这是一个有效的方法,以确保订购的链接我张贴在上面。它会工作一段时间,但在某个时候它将不再工作。这种方法的问题是,每次运行的结果不一定相同。如果将此方法用于更新或删除之类的操作,则无法保证受影响的行与原始选择中的行相同。您需要选择要按其排序的列。如果
id
是一个标识列,那么它就是你最好的选择。@JeremiahCooper这就是我回答的全部要点。。。我明白我需要说得更清楚些。这种方法的问题是每次运行结果不一定相同。如果将此方法用于更新或删除之类的操作,则无法保证受影响的行与原始选择中的行相同。您需要选择要按其排序的列。如果id
是一个标识列,那么它就是你最好的选择。@JeremiahCooper这就是我回答的全部要点。。。我明白我需要说得更清楚些。编辑。