【发布时间】: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
我的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
试试这个:
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
【讨论】:
您可以使用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
【讨论】: