如何解决SQL Server用于随机分配调查的存储过程
| 我必须执行以下操作:从现有表中选择教师,将他们随机分配给4个调查中的1个,然后将教师和分配的调查输入到现有表中(teacherID,surveyID),最后随机选择5个学生并记录下来到另一个现有表(studentID和TeacherID)中。 作为单独的任务,这将很容易...更容易。 在尝试找出最佳流程之前,还没有这样做。创建一个临时表以首先存储教师,然后以某种方式循环(我从未在存储过程中完成此操作)以随机分配调查,然后插入调查表中?创建另一个临时表以随机选择教师的学生,然后将其分配给调查学生表吗? 为了回答下面的rsbarro问题:有三个表。一个记录调查的名称,并具有一个自动递增的id字段。另一个具有教师ID和分配的SurveyID。最后一个具有studentID,TeacherID,其余列用于记录响应(Q1,Q2,Q3等)。调查ID未记录在师生表格中。该Web应用程序以前是通过从Excel文件或Access数据库导入数据来完成的,该数据库使用宏来分配调查和学生。 谢谢, 詹姆士解决方法
假定至少SQL Server 2005:
/* Assign 1 random survey to each teacher */
INSERT INTO TeacherSurvey
(teacherID,surveyID)
SELECT teacherID,(SELECT TOP 1 surveyID FROM Survey ORDER BY NEWID())
FROM Teacher
/* Randomly choose 5 students for each teacher */
INSERT INTO TeacherStudentSurvey
(teacherID,studentID)
SELECT teacherID,studentID
FROM (SELECT teacherID,studentID,ROW_NUMBER() OVER(PARTITION BY teacherID ORDER BY NEWID()) AS RowNum
FROM TeacherStudent) t
WHERE t.RowNum <= 5
,我不太了解学生想要的东西,因此这里有一些代码处理了第一部分。将调查问卷随机分配给老师。也许您可以使用它来弄清楚如何解决剩下的问题。
-- Table with instructors
declare @Teacher table(TeacherID int,Name varchar(15))
insert into @Teacher values (1,\'Instructor 1\')
insert into @Teacher values (2,\'Instructor 2\')
insert into @Teacher values (3,\'Instructor 3\')
insert into @Teacher values (4,\'Instructor 4\')
insert into @Teacher values (5,\'Instructor 5\')
-- Table with the four surveys
declare @Survey table(SurveyID int,SurveyName varchar(15))
insert into @Survey values (1,\'Survey 1\')
insert into @Survey values (2,\'Survey 2\')
insert into @Survey values (3,\'Survey 3\')
insert into @Survey values (4,\'Survey 4\')
-- Target table for Teacher and randomly selected Survey
declare @TeacherSurvey table(TeacherID int,SurveyID int)
insert into @TeacherSurvey (TeacherID,SurveyID)
select
T.TeacherID,(select top 1 SurveyID
from @Survey
order by newid()) as SurveyID
from @Teacher as T
@TeacherSurvey中的行
TeacherID SurveyID
----------- -----------
1 2
2 2
3 4
4 4
5 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。