给查询增加一个序列
2010-01-07 21:18
155 查看
很多时候我们对查询的结果要增加一个序列,通常有用临时表和用自连接两种途径来实现。
用临时表:
select 序号= identity(int,1,1),* into #tmp from @t select * from #tmp ;
drop table #tmp
不用临时表:
select 序号=(select sum(1) from @t where and id<=a.id),*
from @t a order by a.id
稍稍复杂一点,假设表里面要根据不同的类型来加序列,可以这样:
select 序号=(select sum(1) from @t where type=a.type and id<=a.id),*
from @t a order by a.id
继续扩展一下。
select 序号=(select sum(1) from @t where type=a.type and id<=a.id),*
from @t a order by a.id
这个代码有一个情况:当最小id的两者id相同时(这里id假设不是主键,可以看作是成绩之类的),两个的序号都会变成2,或者说是并列第二。
我们通常喜欢将这种情况归为并列第一。这样我们可以将这个代码稍作修改。
注意把比较的<=改成<之后,两个同样最小的id因为没有比它再小的id了所以sum(1)会变成null,所以这里要加个小小的处理。
再对上面的情况加一点点扩展。
如果我的比较方法是先比较id,如果id相同再比较另外一个字段来排序,那应该怎么修改上面的代码呢?
答案:
select 序号=(select isnull(sum(1)+1,1) from @t where type=a.type and (id<a.id or field<a.field) ),*
from @t a order by a.id
用临时表:
select 序号= identity(int,1,1),* into #tmp from @t select * from #tmp ;
drop table #tmp
不用临时表:
select 序号=(select sum(1) from @t where and id<=a.id),*
from @t a order by a.id
稍稍复杂一点,假设表里面要根据不同的类型来加序列,可以这样:
select 序号=(select sum(1) from @t where type=a.type and id<=a.id),*
from @t a order by a.id
------测试代码----------------------------- declare @t table (id int, type int) insert @t select 1 , 2 union select 2 , 2 union select 3 , 1 union select 4 , 2 union select 5, 3 union select 6, 1 union select 7, 3 select * from @t select 序号=(select sum(1) from @t where type=a.type and id<=a.id),* from @t a order by a.id
继续扩展一下。
select 序号=(select sum(1) from @t where type=a.type and id<=a.id),*
from @t a order by a.id
这个代码有一个情况:当最小id的两者id相同时(这里id假设不是主键,可以看作是成绩之类的),两个的序号都会变成2,或者说是并列第二。
我们通常喜欢将这种情况归为并列第一。这样我们可以将这个代码稍作修改。
------测试代码----------------------------- declare @t table (id int, type int) insert @t select 1 , 2 union select 2 , 2 union select 3 , 1 union select 4 , 2 union select 5, 3 union select 6, 1 union select 7, 3 union all --------加入一行与上面一行同样id和type的数据 select 5, 3 select * from @t select 序号=(select isnull(sum(1)+1,1) from @t where type=a.type and id<a.id),* from @t a order by a.id
注意把比较的<=改成<之后,两个同样最小的id因为没有比它再小的id了所以sum(1)会变成null,所以这里要加个小小的处理。
再对上面的情况加一点点扩展。
如果我的比较方法是先比较id,如果id相同再比较另外一个字段来排序,那应该怎么修改上面的代码呢?
答案:
select 序号=(select isnull(sum(1)+1,1) from @t where type=a.type and (id<a.id or field<a.field) ),*
from @t a order by a.id
相关文章推荐
- 在树型结构表中增加一个完整路径意义的栏位将使得查询性能明显提高
- 一个mysql小练习[建表|查询|修改表|增加字段|删除字段|]
- MySQL使用select查询时,在查询结果中增加一个字段并指定固定值
- SQL的一个查询中增加一个序列号【三种不同的方法】
- Codeforces Round #348 E. Little Artem and Time Machine(给你一个n,有三种选择,1表示增加一个值,2表示删除这个数的一个值,3表示查询)
- 通达OA 在工作流中增加根据流水号查询其他工作流的一个小功能(图文)
- sql server 查询时增加一个自增长列
- 通达OA 在工作流中增加根据流水号查询其他工作流的一个小功能(图文)
- 日常联系:一个C++程序完成链表的增加结点、删除结点、打印、查询、逆序等操作
- 自己实现一个SQL解析引擎 功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤: 查询分析
- mySql 为查询的结果集增加一个序号字段
- MySql每月增加一个分区以及查询所有分区
- mysql:为查询结果增加一个自增列
- sql查询时增加一个自动编号的列
- sql select语句查询的时候增加一个字段到结果里,
- 【初学者】写的一个泛型接口类,主要对数据的增加,删除,修改,查询
- asp中 打开网页时出现“操作必须使用一个可更新的查询”原因及解决办法
- 一个前序遍历序列和一个中序遍历序列可以确定一颗唯一的二叉树。
- 设有两个有序(升序)序列存储在同一数组中相邻的位置上,不妨设为A[l..m],A[m+1..h],将它们归并为一个有序数列,并存储在A[l..h]。
- SQLite 创建 查询 增加