现在有一个体育竞赛项目,比赛跑的
要写一个存储过程自动分配胸牌号码
每一场比赛都有好几百人参加,会分
成不同的小组来赛跑,每一组按理说
都是从1排到n的,但是呢,有些人会
参加好几个组的比赛,比如下表张五
参加了小组一的比赛又参加了小组二
的比赛,领导要求在同一次竞赛的不同
小组中的同一个人都是同一个胸牌号,
要不换来换去太麻烦了,所以张五是
5号和王三是6号,导致小组二自动分
配号码时就跳过5号和6号,有谁可以
帮我写这个存储过程吗?
有求在网页上按一个button系统就自动
分配好一个竞赛所有人的胸牌号,如
比赛id =1
姓名 比赛id 小组id 胸牌号码
张一 1 1 1
张二 1 1 2
张三 1 1 3
张四 1 1 4
张五 1 2 5
张五 1 1 5
王一 1 2 1
王二 1 2 2
王三 1 2 6
王三 1 1 6
王四 1 2 3
王五 1 2 4
王六 1 2 7
王七 1 2 8
谢谢!
---------------------------
if not object_id('tb') is null drop table tb Go Create table tb([姓名] nvarchar(2),[比赛id] int,[小组id] int,[胸牌号码] int) Insert tb select N'张一',1,1,1 union all select N'张二',1,1,2 union all select N'张三',1,1,3 union all select N'张四',1,1,4 union all select N'张五',1,2,5 union all select N'张五',1,1,5 union all select N'王一',1,2,1 union all select N'王二',1,2,2 union all select N'王三',1,2,6 union all select N'王三',1,1,6 union all select N'王四',1,2,3 union all select N'王五',1,2,4 union all select N'王六',1,2,7 union all select N'王七',1,2,8 Go update tb set [胸牌号码] = null select * from tb ; with t as (select *,rid = row_number() over (order by getdate()) from tb where 小组id = 1 ) update tb set 胸牌号码 = t.rid from t where t.姓名 = tb.姓名 declare @xm nvarchar(10),@xp int declare @i int set @I = 1 declare cur cursor for select [姓名],[胸牌号码] from tb where 小组id = 2 and 胸牌号码 is null open cur fetch cur into @xm,@xp while @@fetch_status =0 begin while exists(select 1 from tb where 小组id = 2 and 胸牌号码 = @i) set @i = @I + 1 update tb set 胸牌号码 = @i where current of cur fetch cur into @xm,@xp end close cur deallocate cur select * from tb /* 姓名 比赛id 小组id 胸牌号码 ---- ----------- ----------- ----------- 张一 1 1 NULL 张二 1 1 NULL 张三 1 1 NULL 张四 1 1 NULL 张五 1 2 NULL 张五 1 1 NULL 王一 1 2 NULL 王二 1 2 NULL 王三 1 2 NULL 王三 1 1 NULL 王四 1 2 NULL 王五 1 2 NULL 王六 1 2 NULL 王七 1 2 NULL 姓名 比赛id 小组id 胸牌号码 ---- ----------- ----------- ----------- 张一 1 1 1 张二 1 1 2 张三 1 1 3 张四 1 1 4 张五 1 2 5 张五 1 1 5 王一 1 2 1 王二 1 2 2 王三 1 2 6 王三 1 1 6 王四 1 2 3 王五 1 2 4 王六 1 2 7 王七 1 2 8 */ http://topic.csdn.net/u/20090315/06/07961da1-d4a0-4b60-a6be-fd77ea466e87.html