SQL2005 取得行号

 

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值