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

mac2022-06-30  86

下面介绍一个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 )

转载于:https://www.cnblogs.com/liyejun/archive/2009/03/25/1421243.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)