问一个sql查询,如何给查询结果加上序号?

时间:2022-07-18 17:14:35
数据表如下:
学号         姓名
081007101    张三
081007124    李四
090809136    王五



我希望的查询结果显示为

序号      学号         姓名
1         081007101    张三
2         081007124    李四
3         090809136    王五

希望大大们给一个  MS-SQL,MySql,Orcale都通用的查询语句

16 个解决方案

#1


--sql 2000
select 序号 = (select count(1) from tb where 学号 < t.学号) + 1,学号 ,姓名 from tb t

--sql 2005
select 序号 = row_number() over(order by 学号),学号 ,姓名 from tb

--oracle
select row_number() over(order by 学号) 序号,学号 ,姓名 from tb

#2


谢谢楼上的

第一条SQL 2000语句看上去比较通用,但是如果学号没有排序,是不是这条语句就不能用了?????

#3


CREATE TABLE a(num INT,myName VARCHAR(20))

INSERT INTO a (num,myName) SELECT 081007101,'张三' UNION SELECT 081007124,'李四' UNION SELECT 090809136,'王五'

CREATE TABLE #temp (id INT IDENTITY(1,1) NOT NULL ,num INT,myName VARCHAR(20))

INSERT INTO #temp(  num, myName ) SELECT num,myName FROM a 

SELECT * FROM #temp

DROP TABLE a 
DROP TABLE #temp

#4


楼上的好复杂,语句好多
我希望是1条语句,这样可以作为其他查询的子查询

#5


引用 2 楼 andycpp 的回复:
谢谢楼上的

第一条SQL 2000语句看上去比较通用,但是如果学号没有排序,是不是这条语句就不能用了?????

没有学号,你怎么排序?

按名字?如果名字重复了呢?

不过sql 2005和oracle可以解决你的问题,用row_number,但sql 2000不行,需要使用临时表。

#6


楼主没有学号。

#7


select ROW_NUMBER() OVER(ORDER BY 学号 desc),学号, 姓名 from A

#8


其实我的数据库是MySql,我已经明白这个题目的思路了,很可惜MySql没有row_number函数

谢谢楼上各位大侠

但我还是不太了解楼上二位为啥老说没学号?明明有学号啊

我只是说,第一个查询,如果要求原表数据按其他规则排序,而不是按照学号排序,应该就不好使了

#9


学到了一招

#10


引用 8 楼 andycpp 的回复:
其实我的数据库是MySql,我已经明白这个题目的思路了,很可惜MySql没有row_number函数

谢谢楼上各位大侠

但我还是不太了解楼上二位为啥老说没学号?明明有学号啊

我只是说,第一个查询,如果要求原表数据按其他规则排序,而不是按照学号排序,应该就不好使了


如果只是排序这样的查询,没问题。
但是你需要一个序号,如果遇到数据重复,如何定义序号?哪个先哪个后呢?

#11


引用 10 楼 dawugui 的回复:
如果只是排序这样的查询,没问题。
但是你需要一个序号,如果遇到数据重复,如何定义序号?哪个先哪个后呢?


我的需求很简单,加一个序号,只是标注一下该记录在原表中的顺序,它在原表中排第几,就给他编几号,重复数据不会影响到我这种编号方式

#12


用一个临时表表啊,把你的结果插入到一个有自增列的表中,再select

#13


引用 12 楼 wxf163 的回复:
用一个临时表表啊,把你的结果插入到一个有自增列的表中,再select


用临时表的话,需要好多条语句。而我希望这个查询结果还能过作为其他查询的子查询,这样用临时表就不方便了

#14


2000不够强调呀,还是按照乌龟大哥的说法用临时表过度一下吧。

#15


mysql的rownum方案

 select @x:=ifnull(@x,0)+1 as rownum,tbl.*
    from tbl

#16


该回复于2011-03-28 10:20:28被版主删除

#1


--sql 2000
select 序号 = (select count(1) from tb where 学号 < t.学号) + 1,学号 ,姓名 from tb t

--sql 2005
select 序号 = row_number() over(order by 学号),学号 ,姓名 from tb

--oracle
select row_number() over(order by 学号) 序号,学号 ,姓名 from tb

#2


谢谢楼上的

第一条SQL 2000语句看上去比较通用,但是如果学号没有排序,是不是这条语句就不能用了?????

#3


CREATE TABLE a(num INT,myName VARCHAR(20))

INSERT INTO a (num,myName) SELECT 081007101,'张三' UNION SELECT 081007124,'李四' UNION SELECT 090809136,'王五'

CREATE TABLE #temp (id INT IDENTITY(1,1) NOT NULL ,num INT,myName VARCHAR(20))

INSERT INTO #temp(  num, myName ) SELECT num,myName FROM a 

SELECT * FROM #temp

DROP TABLE a 
DROP TABLE #temp

#4


楼上的好复杂,语句好多
我希望是1条语句,这样可以作为其他查询的子查询

#5


引用 2 楼 andycpp 的回复:
谢谢楼上的

第一条SQL 2000语句看上去比较通用,但是如果学号没有排序,是不是这条语句就不能用了?????

没有学号,你怎么排序?

按名字?如果名字重复了呢?

不过sql 2005和oracle可以解决你的问题,用row_number,但sql 2000不行,需要使用临时表。

#6


楼主没有学号。

#7


select ROW_NUMBER() OVER(ORDER BY 学号 desc),学号, 姓名 from A

#8


其实我的数据库是MySql,我已经明白这个题目的思路了,很可惜MySql没有row_number函数

谢谢楼上各位大侠

但我还是不太了解楼上二位为啥老说没学号?明明有学号啊

我只是说,第一个查询,如果要求原表数据按其他规则排序,而不是按照学号排序,应该就不好使了

#9


学到了一招

#10


引用 8 楼 andycpp 的回复:
其实我的数据库是MySql,我已经明白这个题目的思路了,很可惜MySql没有row_number函数

谢谢楼上各位大侠

但我还是不太了解楼上二位为啥老说没学号?明明有学号啊

我只是说,第一个查询,如果要求原表数据按其他规则排序,而不是按照学号排序,应该就不好使了


如果只是排序这样的查询,没问题。
但是你需要一个序号,如果遇到数据重复,如何定义序号?哪个先哪个后呢?

#11


引用 10 楼 dawugui 的回复:
如果只是排序这样的查询,没问题。
但是你需要一个序号,如果遇到数据重复,如何定义序号?哪个先哪个后呢?


我的需求很简单,加一个序号,只是标注一下该记录在原表中的顺序,它在原表中排第几,就给他编几号,重复数据不会影响到我这种编号方式

#12


用一个临时表表啊,把你的结果插入到一个有自增列的表中,再select

#13


引用 12 楼 wxf163 的回复:
用一个临时表表啊,把你的结果插入到一个有自增列的表中,再select


用临时表的话,需要好多条语句。而我希望这个查询结果还能过作为其他查询的子查询,这样用临时表就不方便了

#14


2000不够强调呀,还是按照乌龟大哥的说法用临时表过度一下吧。

#15


mysql的rownum方案

 select @x:=ifnull(@x,0)+1 as rownum,tbl.*
    from tbl

#16


该回复于2011-03-28 10:20:28被版主删除