表如下
id name 序号 姓名
1 张三
2 张三
3 张三
4 张三
5 李四
6 李四
7 李四
8 王二通过SQL转化为:id name 序号 姓名
1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 2 李四
6 李四
7 李四
8 王二 3 王二
id name 序号 姓名
1 张三
2 张三
3 张三
4 张三
5 李四
6 李四
7 李四
8 王二通过SQL转化为:id name 序号 姓名
1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 2 李四
6 李四
7 李四
8 王二 3 王二
insert T select 1,'张三','',''
insert T select 2,'张三','',''
insert T select 3,'张三','',''
insert T select 4,'张三','',''
insert T select 5,'李四','',''
insert T select 6,'李四','',''
insert T select 7,'李四','',''
insert T select 8,'王二','',''update T
set
序号=(select count(distinct name)+1 from T where id<a.id and name!=a.name),
姓名=name
from T a
where
not exists(select 1 from T where name=a.name and id<a.id)select * from T
drop table T
--结果
id name 序号 姓名
----------- ---------- ---------- ----------
1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 2 李四
6 李四
7 李四
8 王二 3 王二(所影响的行数为 8 行)
insert @T select 1,'张三','',''
insert @T select 2,'张三','',''
insert @T select 3,'张三','',''
insert @T select 4,'张三','',''
insert @T select 5,'李四','',''
insert @T select 6,'李四','',''
insert @T select 7,'李四','',''
insert @T select 8,'王二','',''update @T
set 序号=b.id,
姓名=b.name
from @T a,
(select * from @T where id in(select min(id) from @T group by name)) b
where a.id=b.id
select * from @t----result1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 5 李四
6 李四
7 李四
8 王二 8 王二
create table ttt(id int, name nvarchar(10))
insert ttt
select 1, N'张三'
union select 2 ,N'张三'
union select 3 ,N'张三'
union select 4 ,N'张三'
union select 5 ,N'李四'
union select 6 ,N'李四'
union select 7 ,N'李四'
union select 8 ,N'王二' select [id],[name],[id]=case when (select count(1) from ttt where id<a.id and name=a.name)=0 then [id] else null end,[name]=case when (select count(1) from ttt where id<a.id and name=a.name)=0 then [name] else '' end from ttt adrop table ttt
insert into t
select 1, '張三' union all
select 2, '張三' union all
select 3, '張三' union all
select 4, '張三' union all
select 5, '李四' union all
select 6, '李四' union all
select 7, '李四' union all
select 8, '王二'
select a.id,a.name,b.序號, b.姓名 from t a
left join
(
select name as 姓名,min(id)as id, min(id/3)+1 as 序號 from t group by name
)b
on a.id=b.id and a.name=姓名id name 序號 姓名
------ ---------- ----------- ----------
1 張三 1 張三
2 張三 NULL NULL
3 張三 NULL NULL
4 張三 NULL NULL
5 李四 2 李四
6 李四 NULL NULL
7 李四 NULL NULL
8 王二 3 王二(8 row(s) affected)
create table T(id int, name varchar(10),序号 varchar(10),姓名 varchar(10))
insert T select 1,'张三','',''
insert T select 2,'张三','',''
insert T select 3,'张三','',''
insert T select 4,'张三','',''
insert T select 5,'李四','',''
insert T select 6,'李四','',''
insert T select 7,'李四','',''
insert T select 8,'王二','',''
update t set 序号=a.id,姓名=a.name
from t ,
(select * from t a
where not exists(select 1 from t where name=a.name and a.id>id )) a
where t.id=a.idselect * from tid name 序号 姓名
----------- ---------- ---------- ----------
1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 5 李四
6 李四
7 李四
8 王二 8 王二(所影响的行数为 8 行)