让select查询结果额外增加自增的伪序号列

更新时间:2024-02-01 02:41:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

让select查询结果额外增加自增的伪序号列

(2008-05-15 16:36:54) 转载 标签: 分类: 数据库

sql it

在基于数据库的系统的开发过程中,有时需要让select返回的查询结果中存在一列实际的数据库表中并不存在的序号列,即在查询结果中额外增加自增的伪序号列。从网络上可以找到一些解决方案,但总结起来主要有三种: 1.使用数据库自带的序号函数实现

Oracle提供的ROWNUM,SQL Server 2005提供的RANK,ROW_NUMBER都可以比较简单地实现这种需求,不过这种方法对我并不适用,因为我用的是SQL SERVER 2000。

2.使用临时表实现

SQL的IDENTITY函数可以提供自增的序号,但只能用在带有INTO table子句的SELECT语句中,所以如果可以使用临时表的情况下可以使用这种实现方法。和第一种方法一样,这种实现方法对我也不适用,因为现在的项目规定不能使用临时表。 eg:

SELECT IDENTITY(INT,1,1) as seq,field1,field2,...,fieldn INTO tmpTableName FROM srcTableName; SELECT * FROM tmpTableName; DROP TABLE tmpTableName;

3.使用SQL标准语法实现

第三种思路是:将结果集中能确定一行数据唯一性的某列或多列组合成标识符,再把结果集中小于等于标识符的记录数合计成一列,从而满足需求。 eg: SELECT (SELECT COUNT(id) FROM srcTableName AS tbl1 WHERE tbl1.id<=tbl2.id) as seq,field1,field2,...,fieldn

FROM srcTableName AS tbl2 ORDER BY 1 ;

图表1

如果数据表本身并不内含自动地增编号的字段时,要怎么做才能够让SELECT查询结果如图表1所示,额外增加自动递增序号呢?我们提供下列五种方法供您参考: USE北风贸易; GO

SELECT序号= (SELECT COUNT(客户编号) FROM 客户 AS LiMing WHERE LiMing.客户编号<= Chang.客户编号), 客户编号,公司名称 FROM客户 AS Chang ORDER BY 1; GO

SELECT RANK() OVER (ORDER BY 客户编号 DESC) AS 序号, 客户编号,公司名称 FROM客户; GO

SELECT序号= COUNT(*), LiMing.客户编号, LiMing.公司名称 FROM 客户 AS LiMing, 客户AS Chang WHERE LiMing.客户编号>= Chang.客户编号 GROUP BY LiMing.客户编号, LiMing.公司名称 ORDER BY 序号; GO

SELECT序号= IDENTITY(INT,1,1),管道,程序语言,讲师,资历 INTO #LiMing FROM问券调查一; GO

SELECT * FROM #LiMing; GO

DROP TABLE #LiMing; GO

WITH排序后的图书 AS

(SELECT ROW_NUMBER() OVER (ORDER BY 客户编号 DESC) AS 序号, 客户编号,公司名称 FROM 客户)

SELECT * FROM 排序后的图书 WHERE序号 BETWEEN 2 AND 4;

GO

Sql知识链接

http://wenku.http://www.wodefanwen.com//view/0723f1d9ad51f01dc281f143.html

本文来源:https://www.bwwdw.com/article/85hw.html

Top