日期:2014-05-18  浏览次数:20479 次

通过某一行得知在分页中所在的页码
分页的方法有很多,SQL   SERVER   2005甚至BUILD   IN了一种分页的方式,我的需求不是怎么分页,而是反过来。
一个结果集,不分页的时候,假设1000条,按每页10条,那么是100页。
第10页有一行,假定为A
那么现在我想通过A的比如ID,得到第10页的这个页码,有什么办法?
A的ID不是IDENTITY,是GUID,排序也不是以ID排序,以其他某几个字段的值进行排序,甚至组合排序

最直接的办法,从第一页开始取,什么时候看到A为止,当前页就是A所在的页,但是如果页比较多呢,如果A在最后一页呢?那么查询次数实在是难以想象

有没有比较高效简单的方法?

------解决方案--------------------
通过row_number() over(order by ) 函数来算吧
------解决方案--------------------
--这样么?
select (count(1)+9)/10 from t a where 排序字段 < 某条记录该字段的值
------解决方案--------------------
-- 生成临时表
SELECT
RowID = IDENTITY(int, 0, 1),
ID
INTO #
FROM 表A
ORDER BY 排序方式

DECLARE @PageSize int
SET @PageSize = 10 -- 每页的记录数
SELECT
页码 = RowID / @PageSize + 1
FROM #
WHERE ID = '要查询的ID '