2016-09-01 51 views
2

我試圖選擇排名前10行後面的20行。選擇排名前10後的下20行

select TOP 20 * 
from memberform 
where Row_Number over(10) 
+0

由於表沒有內在次序,通過什麼樣的列(S)你想訂購? –

+0

我想在前10行後選擇下20行。是否有行增量到sql? – DiH

+0

你是如何確定表格的前10行的? 'SELECT TOP 10 * FROM T' 返回10個任意行。也許你會在下一個查詢中獲得另外10個。你需要一個'ORDER BY' –

回答

4

你需要使用類似的CTE(公共表表達式)和ROW_NUMBER定義行numberings爲您的數據集 - 然後從編號CTE的行集你想:

;WITH PagingCte AS 
(
    SELECT 
     (list of columns), 
     RowNum = ROW_NUMBER() OVER (ORDER BY -some-column-of-yours-) 
    FROM 
     dbo.memberform 
) 
SELECT 
    (list of columns) 
FROM 
    PagingCte 
WHERE 
    RowNum BETWEEN 10 AND 29 

在內部的ROW_NUMBER()窗口函數中,您需要定義一個訂購,它定義了行的編號方式(按日期順序或ID或任何對您有意義的內容)。

如果沒有一個明確的訂貨,有前10可拿後無接下來的20 ...

+0

我不能使用?從20到40之間的行中選擇頂部20 * – DiH

+0

@DiH:** no ** - SQL Server中沒有自動的內置「行編號」。又一次:**沒有明確的命令**,沒有命令,因此你不能得到「下一個10」 - 下一個10 **命令由什麼?** –

+0

我不能使用select *? – DiH

0
WITH T AS 
(
SELECT TOP 30 name, 
     row_number() OVER (ORDER BY id) AS RN 
FROM memberform 
ORDER BY id 
) 
SELECT 
     MAX(CASE WHEN RN <=10 THEN name END) AS Col1, 
     MAX(CASE WHEN RN > 10 THEN name END) AS Col2 
FROM T  
GROUP BY RN % 10 
1

你的意思抵消條款?

OFFSET排除第一組記錄。 OFFSET只能與ORDER BY子句一起使用。 帶FETCH的OFFSET NEXT返回一個定義的記錄窗口。 帶FETCH的OFFSET NEXT非常適合構建分頁支持。

一般語法排除第一N條記錄是:

SELECT column-names 
    FROM table-name 
    ORDER BY column-names 
    OFFSET n ROWS 

請參考http://www.dofactory.com/sql/order-by-offset-fetch

+0

SQL Server 2008有OFFSET嗎? – jarlh

+0

這是SQL Server ** 2012 **中的**新功能**,因此不適用於SQL Server 2008的OP ... –

+0

sql server ** 2008 ** – Serg