首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

自增列的有关问题

2013-09-06 
自增列的问题如A表的数据 namecode 张三90 张三80 张三70 李四60 王五40 王五50增多一列变成namecode编号

自增列的问题


如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)
*/

热点排行