2011-08-24 97 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