在基于数据库的系统的开发过程中,有时需要让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
/* 方法二: 使用SQL Server 2005 独有的RANK() OVER () 语法*/
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
/*
方法五
使用 SQL Server 2005 独有的ROW_NUMBER() OVER () 语法
搭配 CTE (一般数据表表达式,就是 WITH 那段语法)选取序号2 ~ 4 的数据
*/
WITH排序后的图书 AS
(SELECT ROW_NUMBER() OVER (ORDER BY 客户编号 DESC) AS 序号,
客户编号,公司名称
FROM 客户)
SELECT * FROM 排序后的图书
WHERE序号 BETWEEN 2 AND 4;
GO
分享到:
相关推荐
1、SQL server中创建表,带有自增列。 create table Test_Table(Id int Identity(1,1), Name varchar(20)); 这里用到了IDENTITY 关键字。IDENTITY(a,b),a b均为正整数,a表示开始数,b...查询结果: 补充知识:SQ
select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习
select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习select 查询语句小练习
直接上代码吧~ 用户类型 width=180> placeholder=请选择 change=changeRole($event,scope)> <el-option v-for=item in roles :key=item.value :l
下拉的select框中添加一个搜索框,在select 框中添加新的样式searchClass,就可以使用
子查询是指一条SELECT语句作为另一条SELECT语句的一部分,外层的SELCT语句称为外部查询,内层的SELECT语句称为内部查询(或子查询).doc
下拉模糊查询 jQuery-select 下拉模糊查询 jQuery-select 下拉模糊查询 jQuery-select 下拉模糊查询 jQuery-select 下拉模糊查询 jQuery-select 下拉模糊查询 jQuery-select
带模糊查询的select下拉框,最近做了一个功能,在下拉框中有上千条选项,这种情况下肯定不能一个一个地去找,所以在下拉框中添加了一个模糊查询的功能,很多资料都有各种问题,下面是我实现的完整的实例
Oracle的各种select查询语法,用的到估计也不少了,今天整理了以下
前台select框模糊查询方法 可以实现多选以及模糊匹配 可以调高查找效率
(4)查询 student_info 的姓名和出生日期,查询结果按出生日期从大到小排序。 (5)查询所有姓名“张”的学生的学号和姓名。 3. 对 student_info 表,查询学生的学号、姓名、性别、出生日期及家庭住址,查询 结果...
select多选下拉列表+模糊查询功能,亲测完整,有ASP和HTML样例,代码完整。 <!DOCTYPE html> <title>Insert title here</title> <script src="jquery.min.js"></script> ...
数据库处理的经典查询处理 select查询语句 全面描述
用div+jq高仿ie6的select表单随内容增加 进行了一个升级,将其做成一个类似插件的形式; 在html中,依旧是应用传统的select进行布局,只需要给select一个class为toDiv,就可以动态的将select替换为已经设置好了的div...
mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
combo-select 模糊查询下拉框 包含文件 combo.select.css jquery.combo.select.js
新表的行数据也来自SELECT语句的查询结果,其值可以是计算列表达式,也可以是函数。 【例】 使用CREATE TABLE语句创建一个新表,存放Book表中的图书编号和书名两列。 查询结果的输出 【例】 使用CREATE TABLE语句...
数据同步小工具,将数据库中的表的数据生成insert语句
ACCESS数据库的注入实现之常见的select查询
下拉框带模糊查询select2,里面有需要引入的js,在页面带入即可。网络有模板,喜欢请点赞。