我想从 sql server 2008 中的表中获取 100-150 的行,我该怎么做?有什么办法吗?我尽可能多地搜索限制关键字在 mysql 中可用,但对于 sql server 使用公用表技术,但我不想这样做,有没有其他可用的方法,因为它在 Mysql 中可用?
问问题
2968 次
4 回答
0
于 2012-05-29T13:06:20.677 回答
0
在 SQL 2005 及更高版本中,有一个 ROW_NUMBER() 函数。如果您需要同时适用于 MySQL 和 SQL Server 的东西,那么我不知道这在 MySQL 中是否可用,因为我从未使用过它。
http://msdn.microsoft.com/en-us/library/ms186734.aspx
链接页面中给出的似乎最相关的示例如下所示,其中查询的结果按日期排序,然后返回该结果集中的第 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;
于 2012-05-29T13:13:23.587 回答
0
实际上,最便宜的方法是使用 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
于 2012-05-29T13:31:51.380 回答
0
select * from
(select row_number() over (order by @column) as row,* from Table) as t
where row between 100 and 150
@column 将被您表中的一个列替换,这很好地用于对结果进行排序
于 2012-05-29T13:55:22.783 回答