SQL Server 2005 中行号的显示,分页

下面介绍一个SQL Server 2005 中的新东东:
ROW_NUMBER
返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

语法:
ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )

备注:
ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

参数:
<partition_by_clause>
将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。
<order_by_clause>
确定将 ROW_NUMBER 值分配给分区中的行的顺序。

返回类型:
bigint

示例:

SELECT   *   INTO  #T
  
FROM (
      
SELECT   2  F1,  ' AA '  F2,  ' 101 '  F3  UNION   ALL
      
SELECT   1  F1,  ' AA '  F2,  ' 102 '  F3  UNION   ALL
      
SELECT   4  F1,  ' BB '  F2,  ' 103 '  F3  UNION   ALL
      
SELECT   5  F1,  ' CC '  F2,  ' 104 '  F3  UNION   ALL
      
SELECT   3  F1,  ' AA '  F2,  ' 105 '  F3  UNION   ALL
      
SELECT   7  F1,  ' BB '  F2,  ' 106 '  F3  UNION   ALL
      
SELECT   6  F1,  ' CC '  F2,  ' 107 '  F3  UNION   ALL
       
SELECT   5  F1,  ' CC '  F2,  ' 108 '  F3 
  ) T1

-- 1
SELECT  row_number()  OVER  ( ORDER   BY  F1  ASC AS  F1Order,  *   FROM  #T 
-- 先按照F1顺序,再加上顺序号F1Order,结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
1                      1            AA    102
2                      2            AA    101
3                      3            AA    105
4                      4            BB    103
5                      5            CC    104
6                      5            CC    108
7                      6            CC    107
8                      7            BB    106

-- 2
SELECT  row_number()  OVER  ( ORDER   BY  F1  DESC AS  F1Order,  *   FROM  #T 
-- 先按照F1倒序,再加上顺序号F1Order,结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
1                      7            BB    106
2                      6            CC    107
3                      5            CC    108
4                      5            CC    104
5                      4            BB    103
6                      3            AA    105
7                      2            AA    101
8                      1            AA    102

-- 3
SELECT  row_number()  OVER  ( ORDER   BY  F1  ASC AS  F1Order,  *   FROM  #T  ORDER   BY  F1  ASC
-- 先按照F1顺序,再加上顺序号F1Order,再把结果按F1顺序显示,结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
1                      1            AA    102
2                      2            AA    101
3                      3            AA    105
4                      4            BB    103
5                      5            CC    104
6                      5            CC    108
7                      6            CC    107
8                      7            BB    106

-- 4
SELECT  row_number()  OVER  ( ORDER   BY  F1  ASC AS  F1Order,  *   FROM  #T  ORDER   BY  F1  DESC
-- 先按照F1顺序,再加上顺序号F1Order,再把结果按地F1倒序显示,注意顺序号F1Order也倒过来了,保持位置相对不变,结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
8                      7            BB    106
7                      6            CC    107
5                      5            CC    104
6                      5            CC    108
4                      4            BB    103
3                      3            AA    105
2                      2            AA    101
1                      1            AA    102

-- 5
SELECT  row_number()  OVER  ( ORDER   BY  F1  DESC AS  F1Order,  *   FROM  #T  ORDER   BY  F1  ASC
-- 先按照F1倒序,再加上顺序号F1Order,再把结果按地F1顺序显示,注意顺序号F1Order也倒过来了,保持位置相对不变,结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
8                      1            AA    102
7                      2            AA    101
6                      3            AA    105
5                      4            BB    103
3                      5            CC    108
4                      5            CC    104
2                      6            CC    107
1                      7            BB    106

-- 6
SELECT  row_number()  OVER  ( ORDER   BY  F1  DESC AS  F1Order,  *   FROM  #T  ORDER   BY  F1  DESC
-- 先按照F1倒序,再加上顺序号F1Order,再把结果按地F1倒序显示,结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
1                      7            BB    106
2                      6            CC    107
3                      5            CC    108
4                      5            CC    104
5                      4            BB    103
6                      3            AA    105
7                      2            AA    101
8                      1            AA    102

-- 7
SELECT  row_number()  OVER  (PARTITION  BY  F2  ORDER   BY  F1  ASC AS  F1Order,  *   FROM  #T
-- 先按照F2分组,再按F1顺序,再加上顺序号F1Order,是分组加哦。结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
1                      1            AA    102
2                      2            AA    101
3                      3            AA    105
1                      4            BB    103
2                      7            BB    106
1                      5            CC    104
2                      5            CC    108
3                      6            CC    107

-- 8
SELECT  row_number()  OVER  (PARTITION  BY  F2  ORDER   BY  F1  DESC AS  F1Order,  *   FROM  #T
-- 先按照F2分组,再按F1倒序,再加上顺序号F1Order,是分组加哦。结果如下:
F1Order              F1          F2   F3
-- ------------------ ----------- ---- ----
1                      3            AA    105
2                      2            AA    101
3                      1            AA    102
1                      7            BB    106
2                      4            BB    103
1                      6            CC    107
2                      5            CC    108
3                      5            CC    104

 

最后,可以利用row_number(),可以进行自定义分页,Top 3是每页记录数,pageIndex就是我们需要数据的页数。是不是很简单?

DECLARE   @PageIndex   INT
SELECT   @PageIndex   =   1  
SELECT   TOP   3   *   FROM
(
  
SELECT  row_number()  OVER  ( ORDER   BY  F1  ASC AS  F1Order,  *   FROM  #T 
) A 
WHERE  F1Order  >  ( @PageIndex   *   3 )


转自:http://blog.csdn.net/panys/archive/2007/11/12/1880589.aspx

你可能感兴趣的:(sql server 2005)