关于SQL分组抽签的语句,select top N

遇到一个难题,如下:有个学生表Student,字段:SID(学生编号)、ClassID(班级编号)、Win(0-没抽中、1-抽中)有个任务表Task,字段:ClassID... 遇到一个难题,如下:
有个学生表Student,字段:SID(学生编号)、ClassID(班级编号)、Win(0-没抽中、1-抽中)
有个任务表Task,字段:ClassID(班级编号)、sNum(抽调人数)
现根据任务表,每个班级随机抽调一些学生去劳动,要求把抽中的学生Win字段更新为1
还要一条SQL语句完成,请问如何实现?
展开
 我来答
jnnhjn
2014-01-04 · TA获得超过217个赞
知道答主
回答量:93
采纳率:0%
帮助的人:90.5万
展开全部
我不知道你的抽取人数一样不,如果要总共抽取N个人然后随机分配给每个班,则可以用下边的代码:

update student set win = 1 where sid in (select top (select sum(snum) from task) sid from student order by newid())

如果是每个班抽取同样的人数,或者每个班抽取不同的人数,则需要再连接个classid,然后分组计算出每个班级的sid即可,如果不会可以追问
更多追问追答
追问
您给的代码是用总中奖人数全校任意分配。我这里需要对每个班级指定人数,且人数不一样。存放在Task表里。您说要再连接一个Classid,好像也实现不了,我不是很明白,请赐教!
追答
我想了一下,最后连上classid后不太好取随机数,我又给你换了种写法,要求你的版本要是2005+的,代码如下:
update student set win = 1 where sid in (select sid from (select ROW_NUMBER() over(partition by classid order by newid()) AS N,* from student)a
where N <= (select snum from task where classid = a.classid)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式