2012-05-29 52 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 
相關問題