2012-10-31 130 views
0

可以說我有一張學生表,裏面有1000條記錄。選擇範圍內的100條記錄

我想寫這樣一個查詢,應該只選擇100條記錄,但我應該能夠定義範圍。

Ex. 100 records showing from 501 to 600 
or 100 records showing from 101 to 200 

P.S.是!有一個標識列,但它由隨機數組成。

謝謝你的幫助。

+0

你如何定義範圍?應該有一些列定義它,你不能只要求501-600號記錄而不定義記錄號 –

+0

我計算名爲RowNum的新列,以便知道我有多少記錄,然後給出範圍。 –

回答

1

這應該這樣做。

SELECT a.* FROM (
    SELECT Row_Number() OVER(ORDER BY table.MySortCol) as RowNum, 
    table.* -- columns you need 
    FROM table 
) a 
WHERE a.RowNum between 1 and 100 

這會給你一個一致的結果,即使你沒有在桌子上順序ID設置,這樣你就可以進行有意義的傳呼或你有什麼。

+0

完美的作品。謝謝@ JTC –

+0

非常歡迎!如果您遇到任何其他問題,請讓我知道! – jTC

1

使用TOP[docs]爲SQL Server

SELECT TOP 100 * 
FROM tableName 
WHERE columnName BETWEEN 0 AND 100 

LIMIT爲MySQL

SELECT * 
FROM tableName 
WHERE col BETWEEN 0 AND 100 
LIMIT 100 

更新1

WITH sampleRec 
AS 
(
    SELECT column1, col2, col3, 
      ROW_NUMBER() OVER (ORDER BY colName) rn 
    FROM yourTableName 
) 
SELECT column1, col2, col3 
FROM sampleRec 
WHERE rn BETWEEN 1 AND 100 
+0

但我沒有任何列從1到100,所以在這種情況下,我應該選擇第1行到第100行。你知道如何做到這一點? –

+0

你能否顯示一些樣本記錄?等待我將使用'CTE'更新答案 –

+0

Row_number創建一個int字段,爲您提供可以過濾的1至n個順序字段。 – jTC

1

如果你正在使用MySQL使用limit命令。

SELECT * FROM MyTable的極限X,Y

其中x是開始記錄和Y是記錄數。 因此,對於你的501到600,你會做極限501,100。

這可能適用於其他SQL版本 - 只需查看系統的LIMIT命令即可。

+1

它實際上是Microsoft SQL –

+0

因此tsql標籤。 – jTC

+0

@JTC - tsql標記最初並不存在......只是sql。 – Darrrrrren