使用sql server中的行编号从表中获取行
我想在SQLServer2008中从我的表中获取100-150行,如何才能做到这一点?有什么办法吗?mysql中有很多i search Limit关键字,但对于sql server,请使用公共表技术,但我不想这样做。mysql中还有其他可用的方法吗?使用sql Limit使用sql server中的行编号从表中获取行,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,我想在SQLServer2008中从我的表中获取100-150行,如何才能做到这一点?有什么办法吗?mysql中有很多i search Limit关键字,但对于sql server,请使用公共表技术,但我不想这样做。mysql中还有其他可用的方法吗?使用sql Limit 在SQL 2005及更高版本中,有一个行数函数。如果您需要同时适用于MySQL和SQL Server的东西,那么我不知道MySQL中是否有这种功能,因为我从未使用过它 链接页面中给出的最相关的示例如下,其中查询结果按日期排序,
在SQL 2005及更高版本中,有一个行数函数。如果您需要同时适用于MySQL和SQL Server的东西,那么我不知道MySQL中是否有这种功能,因为我从未使用过它 链接页面中给出的最相关的示例如下,其中查询结果按日期排序,然后返回该结果集中的第50到60行
USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
FROM Sales.SalesOrderHeader
)
SELECT SalesOrderID, OrderDate, RowNumber
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
实际上,最便宜的方法是使用top,然后使用row_number
select *
from (select *, row_number() over (order by (select NULL)) as rownum
from (select top 150 t.*
from t
) t
) t
where rownum >= 100
不过,我要提醒你一点。在关系表中不存在行100-150这样的事情,因为它们本质上是无序的。您需要指定顺序。为此,您需要通过以下方式订购:
select *
from (select *, row_number() over (order by <field>) as rownum
from (select top 150 t.*
from t
order by <field>
) t
) t
where rownum >= 100
@要用表中的列替换的列可以用来排序结果我想知道SQL Server中的一些相同的东西,而不是im mysql删除mysql标记,因为它让人困惑:Row_Number返回最后输入的行,就像identity method do it一样,我们无法给出行数,例如100-120或20-25,etcI在我的答案中添加了一个示例以使其更清楚。它似乎满足了您的要求:从select返回指定范围的行。
select * from
(select row_number() over (order by @column) as row,* from Table) as t
where row between 100 and 150