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

时间:2023-01-26 17:13:54
数据表如下:
ID                 名字
001             张三
002             李四
003             王五
001             张三
002             李四
003             王五
001             张三
002             李四
003             王五


我希望的查询结果显示为

序号     ID                  姓名
1         001                张三
2         001                张三
3         001                张三        
1         002                 李四
2         002                 李四
3         002                 李四
1         003                 王五
2         003                 王五
3         003                 王五

希望大大们给一个 MySql 的查询语句 

11 个解决方案

#1


select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t

#2


SELECT (@i:=@i+1) as 序号 ,t.* from 表A t

#3


SELECT c1.*
,IF(c2.id=@cid, @rn:=@rn+1,@rn:=1) as rn
,@cid:=c2.id
from (select * from t order by ID)c1
join (select distinct ID from t order by id) c2 on c1.id=c2.id
CROSS join (select @rn:=0,@cid=0) c3

#4


select ROW_NUMBER() over(partition by id order by id desc) as 序号,* from table1

#5



select ROW_NUMBER() over(partition by ID order by ID desc) as 序号,* from xxb

#6


引用 1 楼 shoppo0505 的回复:
select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t


引用 1 楼 shoppo0505 的回复:
select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t


这个好像是对的

#7


use Tempdb
go
--> --> 
 
declare @T table([ID] nvarchar(23),[名字] nvarchar(22))
Insert @T
select N'001',N'张三' union all
select N'002',N'李四' union all
select N'003',N'王五' union all
select N'001',N'张三' union all
select N'002',N'李四' union all
select N'003',N'王五' union all
select N'001',N'张三' union all
select N'002',N'李四' union all
select N'003',N'王五'
 
Select 序号=ROW_NUMBER()OVER(PARTITION BY ID ORDER BY ID),* from @T
/*
序号 ID 名字
1 001 张三
2 001 张三
3 001 张三
1 002 李四
2 002 李四
3 002 李四
1 003 王五
2 003 王五
3 003 王五
*/

#8


mysql 的库,用 3# 的,记些前些日子,答过一个这样的问题,翻不到了;

#9


本帖最后由 roy_88 于 2016-05-29 12:11:40 编辑
MySql可这样用

SET @rowindex=0,@ID='';
SELECT  if(a.ID=@ID,@rowindex:=@rowindex+1,@rowindex:=1) AS rn,a.*,@ID:=a.ID as ID2 
from tab1 as a
 order by a.ID;

#10


Row_Number()over(partition by 列名)

#11


select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t

#1


select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t

#2


SELECT (@i:=@i+1) as 序号 ,t.* from 表A t

#3


SELECT c1.*
,IF(c2.id=@cid, @rn:=@rn+1,@rn:=1) as rn
,@cid:=c2.id
from (select * from t order by ID)c1
join (select distinct ID from t order by id) c2 on c1.id=c2.id
CROSS join (select @rn:=0,@cid=0) c3

#4


select ROW_NUMBER() over(partition by id order by id desc) as 序号,* from table1

#5



select ROW_NUMBER() over(partition by ID order by ID desc) as 序号,* from xxb

#6


引用 1 楼 shoppo0505 的回复:
select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t


引用 1 楼 shoppo0505 的回复:
select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t


这个好像是对的

#7


use Tempdb
go
--> --> 
 
declare @T table([ID] nvarchar(23),[名字] nvarchar(22))
Insert @T
select N'001',N'张三' union all
select N'002',N'李四' union all
select N'003',N'王五' union all
select N'001',N'张三' union all
select N'002',N'李四' union all
select N'003',N'王五' union all
select N'001',N'张三' union all
select N'002',N'李四' union all
select N'003',N'王五'
 
Select 序号=ROW_NUMBER()OVER(PARTITION BY ID ORDER BY ID),* from @T
/*
序号 ID 名字
1 001 张三
2 001 张三
3 001 张三
1 002 李四
2 002 李四
3 002 李四
1 003 王五
2 003 王五
3 003 王五
*/

#8


mysql 的库,用 3# 的,记些前些日子,答过一个这样的问题,翻不到了;

#9


本帖最后由 roy_88 于 2016-05-29 12:11:40 编辑
MySql可这样用

SET @rowindex=0,@ID='';
SELECT  if(a.ID=@ID,@rowindex:=@rowindex+1,@rowindex:=1) AS rn,a.*,@ID:=a.ID as ID2 
from tab1 as a
 order by a.ID;

#10


Row_Number()over(partition by 列名)

#11


select 
序号= Row_Number()over(partition by ID)
,ID, 名字
from t