2011-08-24 66 views
2

所以我想弄清楚需要多少頁來顯示我的記錄,基本上需要頁數。計算select語句中的記錄頁數

我會做這樣的事情:

SELECT COUNT(*) % 50 
FROM Customers 
WHERE [email protected] 
AND ModifiedOn > @tStamp 

SO的發言我想拿回2 99條記錄,2 100和3 101

請問這個工作?這是一種不好的做法嗎?在我測試一些價值觀時,似乎有點不自然。

編輯澄清: 我不想讓分頁記錄,只是

回答

11

要計算的頁數的總頁數,只取的記錄數的上限在頁面大小:

SELECT CEILING(COUNT(*)/@PageSize) FROM ... 

@PageSize在你的情況下是50。或者,由於您的應用程序可能知道每頁顯示的所需記錄數量,因此只需編寫一個查詢,從表中返回COUNT(*),然後在代碼中進行計算。例如:

var totalPages = Math.ceil(recordCount/pageSize); 

當你得到你想要選擇屬於一個頁面的記錄點,我不喜歡這樣(萬一你是好奇):

WITH Paged AS 
(
    SELECT 
     ROW_NUMBER() OVER(ORDER BY SortColumn) AS [RowNum] 
     ,* -- because we're going to choose which columns we need later 
    FROM 
     [MyTable] 
) 
SELECT 
    [Column1] 
    ,[Column2] 
    ,etc... 
FROM 
    Paged 
WHERE 
    [RowNum] BETWEEN (@PageNumber - 1) * @PageSize + 1 AND @PageNumber * @PageSize 
ORDER BY 
    [SortColumn] 

您必須從您的應用程序中傳入@PageNumber@PageSize

+1

如果你想返回從SP的總頁數確保在SQL Server分爲整數時將'@ PageSize'強制轉換爲'FLOAT'。即'CEILING(RecordCount/CAST(@PageSize AS FLOAT))AS [TotalPages]' – pechar

2

如果您在分頁SELECT語句中使用

ROW_NUMBER() OVER ({ORDER statement}) AS ROWNUMBER

,可以再加入

COUNT(*) OVER() AS TOTALCOUNT

獲得由查詢

2

我想找到的總記錄數,獲取總頁數的基本問題仍未得到解決。

通過使用一個簡單的邏輯,我認爲它可以在SQL查詢來實現:

TotalPages = (Count(*) OVER() + @NumberOfItems - 1)/@NumberOfItems 

其中「@NumberOfItems」是要顯示在頁面內的項目數量。希望這可以幫助某人。

0

在這裏,我想給總101頁808個細胞like--

SL-------page 
01  01 
02  01 
03  01 
04  01 
05  01 
06  01 
07  01 
08  01 
09  02 
10  02 
11  02 
12  02 
13  02 
14  02 
15  02 
16  02 
----------- 
808  101 

代碼-----

WITH Paged AS 
    (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY SL) AS [RowNum] 
      ,* 
     FROM 
      DATA 
     WHERE 
     CODE=12  
    ) 
    SELECT 
     ID 
     ,SL 
     ,Book 
     ,Page 
    FROM 
     Paged 
    WHERE 
     [RowNum] BETWEEN (1 - 1) * 8 + 1 AND 1 * 8 
    ORDER BY 
     SL