现在有一个体育竞赛项目,比赛跑的
要写一个存储过程自动分配胸牌号码
每一场比赛都有好几百人参加,会分
成不同的小组来赛跑,每一组按理说
都是从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.youkuaiyun.com/u/20090315/06/07961da1-d4a0-4b60-a6be-fd77ea466e87.html

2543

被折叠的 条评论
为什么被折叠?



