在MS-SQL2000中模拟窗口函数ROW_NUMBER()
来源:互联网 发布:红警2网络打不开 xp 编辑:程序博客网 时间:2024/05/17 12:19
原贴地址:http://www.techrss.cn/html/2009/02-06/214505.htm
ROW_NUMBER()是MS SQL Server 2005中新增窗口函数,可用来直接生成行号。如:
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
总能找到不存在重复值的表达式的。
- 在MS-SQL2000中模拟窗口函数ROW_NUMBER()
- 在MS-SQL2000中模拟窗口函数ROW_NUMBER()
- SQL Server 2000数据库中模拟窗口函数ROW_NUMBER
- 窗口函数 row_number 去重复
- SQL2000中像SQL2005中的Row_Number一样获取行号
- SQL2000自制row_number
- pb用纯函数实现在数据窗口中模拟资源管理器鼠标单击动
- HIVE中 ROW_NUMBER() OVER() 函数
- MS-SQL2000中修改表和存储过程的所有者
- pb用纯函数实现在数据窗口中模拟资源管理器鼠标单击动作动态排序,并显示排序箭头
- ROW_NUMBER函数在分页中的使用示例
- 排名函数row_number()在SqlServer2000中的实现
- 在SQL2005中利用RANK()函数与ROW_NUMBER()对现有数据进行排序改造
- 在论坛中出现的比较难的sql问题:2(row_number函数+子查询)
- 在论坛中出现的比较难的sql问题:3(row_number函数 分组查询)
- 在论坛中出现的比较难的sql问题:30(row_number函数 物料组合问题)
- QT在构造函数中关闭窗口
- HIVE分析窗口函数:NTILE,ROW_NUMBER,RANK,DENSE_RANK
- rails 部分插件--解析
- mod_python中文文档
- 中文搜索引擎提交大全
- 系统程序员成长计划-写得又快又好的秘诀(三)
- 关于二维数组和二维指针的相关问题
- 在MS-SQL2000中模拟窗口函数ROW_NUMBER()
- 智能手机系统Windows mobile和Symbian的选择
- 两个select的数据移动,支持IE,ff,google浏览器
- 静态类概念
- 人生三件事不能等
- 大中文博客搜索引擎提交
- 细品RibbonX(2):认识Office的新界面—功能区(Ribbon)
- 清除jsp页面缓存
- 影响网站在Google排名的一些问题