行号是按指定的逻辑顺序为查询结果集中的行分配的连续整数

IF OBJECT_ID(‘TESTTBL‘) IS NOT NULL
 DROP TABLE TESTTBL;
GO

CREATE TABLE TESTTBL
(
    empid VARCHAR(10) NOT NULL primary key,
    mgrid VARCHAR(10) NOT NULL,
    qty INT NOT NULL
)

INSERT INTO TESTTBL (empid,mgrid,qty) VALUES
(‘A‘,‘Z‘,300),
(‘B‘,‘X‘,100),
(‘C‘,‘X‘,200),
(‘D‘,‘Y‘,200),
(‘E‘,‘Z‘,250),
(‘F‘,‘Z‘,300),
(‘G‘,‘X‘,100),
(‘H‘,‘Z‘,150),
(‘I‘,‘X‘,250),
(‘J‘,‘Z‘,100),
(‘K‘,‘Y‘,200)

1,  row_number 函数

SELECT empid,qty,ROW_NUMBER() OVER (ORDER BY qty) AS ROWNUM FROM TESTTBL ORDER BY qty

empid qry rownum

B    100    1
G    100    2
J    100    3
H    150    4
K    200    5
C    200    6
D    200    7
E    250    8
I    250    9
F    300    10
A    300    11

2, 基于游标的解决方案
DECLARE @TestRN TABLE (empid VARCHAR(5), qty INT, rn INT);
DECLARE @empid AS VARCHAR(5), @qty as INT, @rn AS INT;
--BEGIN TRAN
    DECLARE rncursor CURSOR FAST_FORWARD FOR
        SELECT empid, qty FROM TESTTBL ORDER BY qty, empid;
    OPEN rncursor;
    SET @rn=0;
    FETCH NEXT FROM rncursor INTO @empid, @qty;
    WHILE @@FETCH_STATUS=0
    BEGIN
        SET @[email protected]+1;
        INSERT INTO @TestRN (empid,qty,rn) VALUES
        (@empid,@qty,@rn)
        FETCH NEXT FROM rncursor INTO @empid, @qty;
    END
    CLOSE rncursor;
    DEALLOCATE rncusor;
    SELECT empid,qty,rn FROM @TestRN;
--OMMIT TRAN

3, 基于IDENTITY 的解决方案

SELECT empid, qty, IDENTITY(INT, 1, 1) AS rn

INTO @TestRN FROM TESTTBL ORDER BY qty, empid;

SELECT * FROM @TestRN;

DROP TABLE @TestRN;

4, 按行号来实现简单分页

DECLARE @pagesize as INT;
DECLARE @pagenum as INT;
SET @pagesize=3;
SET @pagenum=3;

WITH TEST AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY qty, empid) AS rownum,
    empid, mgrid,qty
    FROM TESTTBL
)
SELECT rownum,empid, mgrid,qty FROM TEST
WHERE rownum > @pagesize * (@pagenum-1)
AND rownum <= @pagesize * @pagenum
ORDER BY rownum;

rownum empid mgrid qty

7    K    Y    200
8    E    Z    250
9    I    X    250

Summary:

在某种程度上,ROW_NUMBER 函数会比 游标、IDENTITY快很多,因为游标和IDENTITY会把结果保存到表中,以备后用,这两种方法会产生大量的I/O.

时间: 2024-11-08 02:58:18

行号是按指定的逻辑顺序为查询结果集中的行分配的连续整数的相关文章

JTextpane 加入的行号

最近项目需求,在需求JTextPane加入行号等信息,网上找了半天才发现JTextArea加入行号信息.copy正在研究在线程序.他发现自己能够做出改变来改变JTextPane显示行号. 代码: package com.cml.line; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; i

显示行号的6种方法、chkconfig、tar、awk、cut过滤字符串、ps配合wc查看过滤进程

Day10 Georgekai-习惯:操作前备份,操作后检查 第1章 第二波剩余命令:显示行号的6种方法.chkconfig.tar.awk.cut过滤字符串.ps配合wc查看过滤进程 1.1 打印配置文件nginx.conf内容的行号及内容,该如何做? 1.1.1 花括号的作用 {} 注:生成序列,连续输入显示到屏幕,包括数字和字母 例1:[[email protected] ~]$ echo {1..10} 1 2 3 4 5 6 7 8 9 10 例二:[[email protected]

Vim的行号、语法显示等设置(.vimrc文件的配置)以及乱码解决

在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本, 所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为:$vi ~/.vimrc #支持putty鼠标粘贴 if has('mouse') set mouse -= a endif 设置完后$:x 

Easyui Datagrid 修改显示行号列宽度

EasyUI中Datagrid的第一列显示行号,可是如果数据量大的的时候,显示行号的那一列数据会显示不完全的. 可以通过修改Datagrid的样式来解决这个问题,在样式中加入下面这个样式,就可以自己修改显示行号列的宽度了 .datagrid-header-rownumber,.datagrid-cell-rownumber{ width:40px; }

Vim 默认开启行号、语法显示等设置

在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc. 在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本,所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为: $vi ~/.vimrc 设置完后 $:x 或者 $wq 进行保存退出即可. 下面给出一个例子,其中列出了经常用到的设置,详细的设置信息请参照

C/C++ 打印文件名、行号、函数名的方法

转自:http://blog.csdn.net/cabinriver/article/details/8960119 今天跟踪一段开源代码的时候,因为对代码不太熟悉,所以要打印一些关键的信息.便顺手整理了一下这个能打印文件名.行号.函数名的宏. 1.打印文件名.行号.函数的两种方式 [cpp] view plain copy /************************************************************************** *  @Copyri

VIM技巧之去除代码行号并缩进代码

从网上找源代码时经常会发现代码虽然排版很好,但是前面带着行号,直接复制粘贴得将前面的行号去掉才能编译,而更糟糕的是前面带行号,而代码又没排版,简直是噩梦.在VIM中可以轻易地解决这个问题. 这里将网上的一段代码粘贴到VIM中时的截图: 图1 网上的代码粘贴到VIM中 是不是相当糟糕,使用正则表达式替换(前头的:表示输入模式) :%s/[ \t]*\d\{1,4\}/ 立马得到如下结果 图2 替换后的结果 现在效果好了不少,不过还有个问题,缩进有的不正确,OK. 进入Normal模式,通过(命令右

DevExpress GridControl 显示行号、设置行号宽

显示行号类 /// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="gv">GridView 控件名称</param> /// <param name="width">行号列的宽度 如果为null或为0 默认为30</param> public void DrawRowIndicator(DevExpres

SQL查询显示行号、随机查询、取指定行数据

1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用临时表,但在SQL Server2005中,使用ROW_NUMBER()非常方便. select row_number() over (order by UseriD) as rowNum,* from UserInfo 查询结果: 2.随机查询 有的时候我们需要查询出的数据是随机排序的,newid()函数在扫描每条记录时