• 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

     

  • 相关阅读:
    洛谷 P1032 字串变换
    map && multimap
    【转载】Pycharm调试高效,还是pdb调试高效? (在服务端)
    弱国无外交 弱国一定无外交吗
    [转发]Linux性能测试工具之Lmbench特性、安装及使用
    fedora21 桌面用户自动登录lightdm.conf -20190520 方法
    获取显卡硬件信息lspci -vnn | grep VGA -A 12
    mate桌面用户 root 自动登录lightdm.conf -20190520 方法【fedora 21】mate
    在线文本差异对比
    【科目三】机考 教练不出话 态度要好
  • 原文地址:https://www.cnblogs.com/yasin/p/1542551.html
Copyright © 2020-2023  润新知