如何在select的查询结果中加入一个自增列

时间:2022-06-19 00:49:25
如题 

我想查出的结果如下
 序号    名称 
  1       a
  2       b
  3       c
  4       d
  5       e
-------------------------------------------
其中名称列是原表中有的,序号列是在查询时生成
问题:这个序列怎样在select中生成

目前我只想到这个办法
Select no=Identity(int,1,1),* Into #temptable From TableName 
Select * From #temptable  
Drop Table #temptable

请问还有别的招吗?

10 个解决方案

#1


如果名称不重复:

select (select count(*) from 表 where 名称<=t.名称) as id,t.* from 表 t

#2


自增长的貌似也就这样了,或者:declare @b table(名称 char(10))
insert into @b select 'a' union all
select 'b' union all
select 'c' union all
select 'd' union all
select 'e'
select 序号=(select count(*) from @b a where b.名称>=a.名称),名称 from @b bresult:
序号          名称         
----------- ---------- 
1           a         
2           b         
3           c         
4           d         
5           e         

(所影响的行数为 5 行)

#3


libin_ftsafe(子陌红尘:当libin告别ftsafe) ( ) 

----
如果记录很多的话,效率是很低的!

#4


:(这个太慢了,每次都要聚合一下。我那个表中有500W记录,好半天都出不来。
还有好办法吗?

#5


你用的SQL的什么版本,SQL2005新增row_number()函数,可以显示序号

#6


我用的是sql2000

#7


其实identity很好的啦
那试试:
select no=0,* into #tmptb from tablename
delcare @i int
set @i=0
update #tmptb no=@i,@i=@i+1
select * from #tmptb

--其实效率肯定比identity差不少

#8


暫時還沒有想到更好的辦法,先接分吧

#9


只有在中间层或者显示层解决比较快一点了

#10


排名:
select (select count(*) from 表 where 名称<=t.名称) as id,t.* from 表 t

#1


如果名称不重复:

select (select count(*) from 表 where 名称<=t.名称) as id,t.* from 表 t

#2


自增长的貌似也就这样了,或者:declare @b table(名称 char(10))
insert into @b select 'a' union all
select 'b' union all
select 'c' union all
select 'd' union all
select 'e'
select 序号=(select count(*) from @b a where b.名称>=a.名称),名称 from @b bresult:
序号          名称         
----------- ---------- 
1           a         
2           b         
3           c         
4           d         
5           e         

(所影响的行数为 5 行)

#3


libin_ftsafe(子陌红尘:当libin告别ftsafe) ( ) 

----
如果记录很多的话,效率是很低的!

#4


:(这个太慢了,每次都要聚合一下。我那个表中有500W记录,好半天都出不来。
还有好办法吗?

#5


你用的SQL的什么版本,SQL2005新增row_number()函数,可以显示序号

#6


我用的是sql2000

#7


其实identity很好的啦
那试试:
select no=0,* into #tmptb from tablename
delcare @i int
set @i=0
update #tmptb no=@i,@i=@i+1
select * from #tmptb

--其实效率肯定比identity差不少

#8


暫時還沒有想到更好的辦法,先接分吧

#9


只有在中间层或者显示层解决比较快一点了

#10


排名:
select (select count(*) from 表 where 名称<=t.名称) as id,t.* from 表 t