自增列的问题
如A表的数据
name code
张三 90
张三 80
张三 70
李四 60
王五 40
王五 50
增多一列变成
name code 编号
张三 90 1
张三 80 2
张三 70 3
李四 60 1
王五 40 2
王五 50 1
[解决办法]
create table A表
(name varchar(10), code int)
insert into A表
select '张三', 90 union all
select '张三', 80 union all
select '张三', 70 union all
select '李四', 60 union all
select '王五', 40 union all
select '王五', 50
--虚拟增多一列
select name,code,
row_number() over(partition by name order by code desc) '编号'
from A表
order by name desc
/*
name code 编号
---------- ----------- --------------------
张三 90 1
张三 80 2
张三 70 3
王五 50 1
王五 40 2
李四 60 1
(6 row(s) affected)
*/
--实际增多一列
alter table A表 add 编号 int
update a
set a.编号=b.rn
from A表 a
inner join
(select name,code,
row_number() over(partition by name order by code desc) 'rn'
from A表) b on a.name=b.name and a.code=b.code
select name,code,编号 from A表
/*
name code 编号
---------- ----------- -----------
张三 90 1
张三 80 2
张三 70 3
李四 60 1
王五 40 2
王五 50 1
(6 row(s) affected)
*/