【问题标题】:Finding Page Number of specific record查找特定记录的页码
【发布时间】:2014-06-09 01:35:09
【问题描述】:

我的users表,表结构是:

ID UserName
 1   AAA
 4   BBB
 7   CCC
 ........
 ........

其中 ID 是主键和身份字段。

假设PageSize 为10,我想find the page number for the ID 43。有没有办法在哪个页面找到ID(43)?

谢谢!

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    试试这个:

    DECLARE @PageSize INT = 10
    DECLARE @Order DECIMAL(10,2)
    DECLARE @UserID INT = 1
    
    SET @Order = (  SELECT  OrderNo
                    FROM
                        (SELECT *, ROW_NUMBER() OVER (ORDER BY UserID) AS OrderNo
                         FROM   Users
                        ) AS U
                    WHERE U.UserID = @UserID
                 )
    
    SELECT @UserID AS UserID, CEILING(@Order/@PageSize) PageNo
    

    【讨论】:

      【解决方案2】:

      您可以使用Row_Number 和分区选项来实现这一点。

      SELECT  ROW_NUMBER() OVER (ORDER BY UserID) AS OrderNo, *
                           FROM   Users
      

      现在您只需使用页面大小给出 where 条件即可找出页面编号。在您的情况下,简单查询会给出没有分区选项的结果。

      Declare @userid int =  43,    @PageSize int = 10
      
      ;with cte as
      (
        SELECT  
             ROW_NUMBER() OVER (ORDER BY UserID) AS OrderNo, *
        FROM   Users 
      )                     
      
      Select 
            CEILING(OrderNo/@PageSize) PageNo 
      FROM 
             cte where userID = @UserID 
      

      带有分区选项的行号。如果您想在另一列上重新排序,那么,

      ;with cte as
          (
            SELECT  
                 ROW_NUMBER() OVER (PARTITION BY CompanyId ORDER BY UserID ) AS OrderNo, *
            FROM   Users 
          )           
      Select 
                CEILING(OrderNo/@PageSize) PageNo 
          FROM 
                 cte where userID = @UserID     
      

      【讨论】:

      • 关于查询你在哪里使用了Partition?
      • tnx ,请检查更新的答案。 partition by 用于基于另一列(如公司有用户 ID)重新排序,因此我们重新排序/重置公司明智的用户 ID。
      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2013-06-04
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多