如何sql server page_number喜欢row_number

时间:2013-03-19 12:42:20

标签: sql sql-server tsql pagination

当前上下文:分页查询结果

我需要知道是否有某种方法可以在我的查询中获得计算值,例如row_number,它计算特定行数的下一个新值。

如果我使用row_number,它将在我的结果中生成一个类型的标识列,我想知道它是否在指定的行上行。像这样:

每页行数:3

RowNum, PageNum, Value
1, 1, rowa
2, 1, rowb
3, 1, rowc
4, 2, rowd
5, 2, rowe
6, 2, rowf
7, 3, rowg 

2 个答案:

答案 0 :(得分:1)

使用ranking function<partition_by_clause>,其中包含:

  

将FROM子句生成的结果集划分为   应用了ROW_NUMBER函数。对于PARTITION的语法   BY,见OVER Clause。

例如ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...)

WITH CTE
AS
(
   SELECT *,
     ROW_NUMBER() OVER(PARTITION BY PageNum
                       ORDER BY Id) AS  Rownumber
   FROM tablename
) 
...

答案 1 :(得分:1)

这应该有效:

WITH CTE AS
(
   SELECT 
      RowNum = ROW_NUMBER()OVER (ORDER BY Value ASC),
      Value
   FROM 
      dbo.TableName
)
SELECT 
   RowNum,
   PageNum = ((RowNum - 1) / 3) + 1,
   Value
FROM 
   CTE
ORDER BY 
   RowNum ASC

DEMO

当然3应该是一个参数。