日期:2014-05-18 浏览次数:20535 次
--> 测试数据:[tbl] if object_id('[tbl]') is not null drop table [tbl] create table [tbl]([组名] varchar(4),[成员] varchar(1)) insert [tbl] select '一组','a' union all select '一组','a' union all select '一组','b' union all select '一组','b' union all select '二组','c' union all select '二组','d' go alter table tbl add id int go alter table tbl add row int identity(1,1) go update tbl set id=row_num from( select *, row_num=(select COUNT(1) from tbl where 组名=a.组名 and 成员=a.成员 and row<=a.row) from tbl as a)b where tbl.row=b.row go alter table tbl drop column row go select * from tbl /* 组名 成员 id 一组 a 1 一组 a 2 一组 b 1 一组 b 2 二组 c 1 二组 d 1 */ --楼主的结果是不是给错了?
------解决方案--------------------
--> --> (Roy)生成測試數據 if not object_id('Tempdb..#T') is null drop table #T Go Create table #T([组名] nvarchar(2),[成员] nvarchar(1)) Insert #T select N'一组',N'a' union all select N'一组',N'b' union all select N'二组',N'c' union all select N'二组',N'd' Go alter table #T add 编号 int --新增字段 -- go update t1 set 编号=编号2 from (select *, 编号2=ROW_NUMBER()OVER (partition by 组名 order by 组名) from #T )t1 go select * from #T /* 组名 成员 编号 一组 a 1 一组 b 2 二组 c 1 二组 d 2 */