随机分配体育比赛胸牌号

现在有一个体育竞赛项目,比赛跑的
要写一个存储过程自动分配胸牌号码
每一场比赛都有好几百人参加,会分
成不同的小组来赛跑,每一组按理说
都是从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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值