学号 姓名
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语句看上去比较通用,但是如果学号没有排序,是不是这条语句就不能用了?????
第一条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条语句,这样可以作为其他查询的子查询
我希望是1条语句,这样可以作为其他查询的子查询
#5
没有学号,你怎么排序?
按名字?如果名字重复了呢?
不过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
如果只是排序这样的查询,没问题。
但是你需要一个序号,如果遇到数据重复,如何定义序号?哪个先哪个后呢?
#11
我的需求很简单,加一个序号,只是标注一下该记录在原表中的顺序,它在原表中排第几,就给他编几号,重复数据不会影响到我这种编号方式
#12
用一个临时表表啊,把你的结果插入到一个有自增列的表中,再select
#13
用临时表的话,需要好多条语句。而我希望这个查询结果还能过作为其他查询的子查询,这样用临时表就不方便了
#14
2000不够强调呀,还是按照乌龟大哥的说法用临时表过度一下吧。
#15
mysql的rownum方案
select @x:=ifnull(@x,0)+1 as rownum,tbl.*
from tbl
#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语句看上去比较通用,但是如果学号没有排序,是不是这条语句就不能用了?????
第一条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条语句,这样可以作为其他查询的子查询
我希望是1条语句,这样可以作为其他查询的子查询
#5
没有学号,你怎么排序?
按名字?如果名字重复了呢?
不过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
如果只是排序这样的查询,没问题。
但是你需要一个序号,如果遇到数据重复,如何定义序号?哪个先哪个后呢?
#11
我的需求很简单,加一个序号,只是标注一下该记录在原表中的顺序,它在原表中排第几,就给他编几号,重复数据不会影响到我这种编号方式
#12
用一个临时表表啊,把你的结果插入到一个有自增列的表中,再select
#13
用临时表的话,需要好多条语句。而我希望这个查询结果还能过作为其他查询的子查询,这样用临时表就不方便了
#14
2000不够强调呀,还是按照乌龟大哥的说法用临时表过度一下吧。
#15
mysql的rownum方案
select @x:=ifnull(@x,0)+1 as rownum,tbl.*
from tbl