2012-05-29 77 views
0

我想从sql server 2008中的表中获取100-150的行,我该怎么做?有没有办法做到这一点?尽可能多的我搜索限制关键字是在MySQL中可用,但对于SQL服务器使用通用表技术,但我不想这样做是否有任何其他方式可用,因为它是在MySQL中可用?使用sql server中的row no从表中获取行

+0

卸载MySQL的标签,因为它是混乱:) – bendataclear

回答

0
select * from 
(select row_number() over (order by @column) as row,* from Table) as t 
where row between 100 and 150 

@column要由colomn从表中的女巫以及用于排序结果

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; 
+0

Row_Number返回最后一个输入的行像身份证方法那样做,我们不能给行数例如100-120或20-25等 – user1387147

+0

我添加了一个例子我的答案使其更清晰。它似乎按照你所要求的做法:从select中返回指定范围的行。 – paulH

0

实际工作中,最便宜的方式做,这是一个使用上面,然后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 
相关问题