高分求挑战性sql分组问题,达人进来

waxi 2008-11-06 11:04:50
是一个随机分组考试的sql问题。我设想是先建立考试名,接着选择使用的考场和设置考场的人数。选择要考试学生。随机分进考场里。

有三个表:学生stu(字段stu_id,stu_name),考试表exam(字段exam_id,exam_name),教室表room(room_id,room_name) 考场表exam_room
(字段:exam_room_id,exam_id,room_id,stu_id)
原始数据:
exam_id exam_name
1 第一物理考试

stu_id stu_name
1 A
2 b
3 .
. .
. .
. .
2000 ZZ

room_id room_name
1 A栋1-1
2 A栋1-2
3 A栋1-3
4 A栋1-4

第一步设置那些教室用于(第一物理考试)考试,并设置考场的人数。
比如选择了A栋1-1(30 人),A栋1-2(25 人)
那就产生
exam_room_id exam_id room_id stu_di
1 1 1 空
2 1 1 空
3 1 1 .
. . . .
. . .
30 . 1
31 . 2
. . .
55 1 2 空


问题是选择要考试的55个学生后怎么随机修改填入exam_room表中?或是修改数据库也可以达到这个功能也可以。谢谢

...全文
130 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Herb2 2008-11-06
  • 打赏
  • 举报
回复
insert exam_room(exam_id,room_id,stu_id)
select room_id,exam_id,stu_id
from (select room_id,exam_id,bid=isnull((select sum(room_sum) from room where room_id < a.room_id),0)+1,room_sum from room ) a,
stu b
where a.stu_id between a.bid and a.bid+a.room_sum
order by newid()
Herb2 2008-11-06
  • 打赏
  • 举报
回复

有三个表:学生stu(字段stu_id,stu_name),考试表exam(字段exam_id,exam_name),教室表room(room_id,room_name) 考场表exam_room
(字段:exam_room_id,exam_id,room_id,stu_id)
--------------------------------------------------------------------------------------------------------------

你的教室人数在哪,我没看到,以下是假设在教室表room(room_id,room_name,room_sum,exam_id) room_sum 考场人数 exam_id 该教室用于什么考试
exam_room_id 应该是自增列吧。
你的考生好像没有分类,是不是什么考试都可以参加,随机选择考试科目。




richnaly 2008-11-06
  • 打赏
  • 举报
回复
班级问题呀,顶一下
-狙击手- 2008-11-06
  • 打赏
  • 举报
回复
这个以前一个随机分班级的帖子,你找找
lonlyhawk 2008-11-06
  • 打赏
  • 举报
回复

这样?


--对学生表随机排序,并加自增字段
select fid=identity(int,1,1),* into #t from 学生表 where stu_id<=55 order by newid()

--再按fid填入考场表
select a.*,b.stu_id from 考场表 a inner join #t b on a.exam_room_id=b.fid
waxi 2008-11-06
  • 打赏
  • 举报
回复
补充,要不在stu表加个class班级字段。
stu_id stu_name class
1 a 1
2 b 1
3 c 1
. . .
. . .
. . .
55 cc 1
. . .
. .
. .
选择的是1班的学生。
waxi 2008-11-06
  • 打赏
  • 举报
回复
to:arrow_gx
程序怎么实现?可以举例,什么语言都可以。
waxi 2008-11-06
  • 打赏
  • 举报
回复
补充:选择的学生就是1至55号
arrow_gx 2008-11-06
  • 打赏
  • 举报
回复
这个用程序来实现比较容易,不知道楼主在什么方面碰到了问题 ??
waxi 2008-11-06
  • 打赏
  • 举报
回复
先结贴,搞比定才问了,谢谢大家。
ying_wzm 2008-11-06
  • 打赏
  • 举报
回复
select * from (
select 1 as id,newid() as nbr
union all
select 2,newid()
union all
select 3,newid()
union all
select 4,newid()
union all
select 2,newid()
union all
select 5,newid()
) a order by nbr

waxi 2008-11-06
  • 打赏
  • 举报
回复
to:Herb2
是的加个字段统计更好。谢了。我试试
waxi 2008-11-06
  • 打赏
  • 举报
回复
to:Herb2
考场人数可以记录也可以不记录的。程序插入exam_room表是,用exam_id是可以统计的。
flairsky 2008-11-06
  • 打赏
  • 举报
回复
order by newid()

其实就是这一句嘛,很简单的

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧