sql2005中生成行号[转]

窗口函数,可用来直接生成行号。如:
select ROW_NUMBER() over (order by ENo), ENo,EName
from Employee
select ROW_NUMBER() over (order by ENo), ENo,EName
from Employee

但是SQL Server 2000中是没有这个函数的,那除了迁移数据库版本外,有没有替代的解决方法呢?答案是肯定的。
有两个思路

1、使用临时表。
如果是在存储过程中,这是一个不错的选择。
创建一个临时表,其中除了需要的查询结果外,还一个记数列。查询结果放入临时表后(一般情况下可直接使用Insert into语句),用代码进行记数,更新记数列的值。
在记数列数值的生成方法上,还有一个改进的办法是直接将该列定义为自增长字段。这样“记数”的代码也省掉了。

2、采用自连接。
如果是在代码中,不便于使用临时表,可以采用此方法。比如执行一个查询统计,需要一个替代的SQL语句。
这个方法实际上是通过表的自连接给结果行“分等级”的思路来实现的。
语句如下:
select count(*),e1.ENo, e1.EName
from Employee e1
inner join Employee e2 on e1.ENo >= e2.ENo
group by e1.ENo, e1.EName
order by 1
select count(*),e1.ENo, e1.EName
from Employee e1
inner join Employee e2 on e1.ENo >= e2.ENo
group by e1.ENo, e1.EName
order by 1

或者把join条件放到where子句中:
select count(*),e1.ENo, e1.EName
from Employee e1, Employee e2,
where e1.ENo >= e2.ENo
group by e1.ENo, e1.EName
order by 1
select count(*),e1.ENo, e1.EName
from Employee e1, Employee e2,
where e1.ENo >= e2.ENo
group by e1.ENo, e1.EName
order by 1

如果ENo字段值不重复,还可以这样写:
select (select count(*) from Employee e2 where e1.ENo >= e2.ENo), e1.ENo, e1.EName
from Employee e1
order by 1
select (select count(*) from Employee e2 where e1.ENo >= e2.ENo), e1.ENo, e1.EName
from Employee e1
order by 1

如果ENo字段值有重复的情况,要使用最后一种写法可以将where条件变通一下,如:
where e1.ENo+e1.EName >= e2.ENo+e2.EName
总能找到不存在重复值的表达式的。

时间: 2025-01-24 19:55:10

sql2005中生成行号[转]的相关文章

WPF的treeview怎么生成行号

问题描述 WPF的treeview怎么生成行号 本人新手,没用过treeview,希望大神直接代码.或者QQ:248941670

为数据库的表自动生成行号----为分页打好基础(仿Oracle的ROWNUM)

oracle|分页|数据|数据库 在以数据库为基础的应用程序开发中,分页是一个比较常用的操作,可惜的是SQL Server2000中没有Oracle中相应的ROWNUM属性可用,小弟用"触发器"生成一个ROWNUM列]勉强可以一用,当然用如下的SQL语句也可以生成第i页,每页n行,tid是主键列,select top n  * from tab  where strWhere  and  tid>(select max(tid)                          

Sql2005中对XML类型字段的运用

sql2005|xml 在SQL2005中增加了xml类型数据.这样,我们可以将我们应用程序中的实体对象直接保存到数据库中.下次要取的时候就可以直接将XML反序列化成实体对象.对于数据量不是很大的情况下,可以考虑使用. select * from Employee where [content].exist('//Age[text()>9000]')=1 此SQL语句中带有xpath的查询,可以找出employee表中content为XML类型列中子节点>9000的所有记录 看一下,运用. u

SQL2005中SSIS的空目标适配器

sql2005 SQL2005中SSIS的空目标适配器 这个适配器使用非常简单且不用安装,主要用它来中止你的数据流,相当于空设备 添加适配器到工具栏 在工具栏中选择项1.在SSIS包中右键选择"Choose Items..." 2.定位并选择适配器在对话框中选择"SSIS Data Flow Items"栏,并选中它,单击OK 3. 现在你就可以在工具栏看到空适配器了 

asp.net中生在文章缩略图并加入图片信息

asp.net|缩略图 asp.net中生在文章缩略图,并在图片上加入图片版板等信息  //定义image类的对象     Drawing.Image image,newimage;  //图片路径  protected string imagePath;  //图片类型  protected string imageType;  //图片名称  protected string imageName;   //提供一个回调方法,用于确定Image对象在执行生成缩略图操作时何时提前取消执行  //

asp在SQL SER2k中新建帐号和给帐号权限的实现(转)

asp在SQL SER2k中新建帐号和给帐号权限的实现 发布于:2002-5-12 ' 以下为在asp中增加一个sql server2000用户函数,并为建立一个数据库,给他dbo的权限 ' ****************注意:sql server的验证方式不要选仅为windows方式, ' **************** 允许远程sql server连接 ' ****************该函数已通过测试**************************** ' 有什么问题欢迎和我交流

如何在Word 2013文档中使用行号

通过在Word2013文档中使用行号,可以帮助用户方便地找到特定的行.行号适用于文献资料的查阅,在Word2013文档中使用行号的方法如下所述: 第1步,打开Word2013文档窗口,切换到"页面布局"功能区. 第2步,在"页面设置"分组中单击"行号"按钮,然后在"行号"列表中选择"连续"."每页重编行号"或"每节重编行号"选项使用合适的行号,如图2013072811

Android开发中遇到端口号占用问题解决方法

  这篇文章主要介绍了Android开发中遇到端口号占用问题解决方法,本文给出了一个简洁实用的方法来解决这个烦人的问题,需要的朋友可以参考下 Android开发的时候经常遇到端口号被占用的问题,经常使程序无法运行,很烦人.我总结了一个很好的方法,非常实用.方法如下: (1):方法1: 第一步:1:netstat -ano | findstr "5037" 第二步:2:TASKLIST | findstr "9292" (2):方法2: 首先进入目录下:E: 代码如下

快速实现Word文档中更改单引号教程

  有时从网上下载了一些文本,发现其中的标点都是半角西文的.如果是逗号.句号倒也好说,在word中弄个"查找并替换"也就成了,惟独西文中没有前引号和后引号之分,给我们更改带来了不便.其实,只要把文本先拷贝到word中,然后选择"格式"菜单下的"自动套用格式"命令,在打开的如图1所示窗口中不作任何选择,而是直接点击"确定"按钮,一会儿你会惊喜地发现word中所有单引号都已经被更改成中文的双引号了. 小提示 ★该功能只有简体中文版