如何让SELECT查询结果额外增加⾃动递增序号让select查询结果额外增加⾃增的伪序号列
在基于数据库的系统的开发过程中,有时需要让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.客户编号
oracle数据库怎么查询表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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。