2011-04-13 70 views
2

我必須執行以下操作:從現有表中選擇教師,隨機將其分配給4個調查中的1個,並將教師和所分配的調查輸入到現有表(teacherID,surveyID)中,最後隨機選擇5名學生並將其記錄到另一個現有表格(studentID和teacherID)中。用於隨機分配調查的SQL Server存儲過程

作爲單獨的任務,這將是容易的...更容易。

在我試圖找出最佳過程之前,沒有做過這件事。創建一個臨時表以首先存儲教師,然後以某種方式循環(我從來沒有在存儲過程中完成此任務),隨機分配調查,然後插入調查表中?創建另一個臨時表來隨機選擇教師的學生,然後將其分配到調查學生表中?

回覆rsbarro的問題如下:有三個表格。一個記錄調查的名稱並具有自動遞增的id字段。另一個具有teacherID和分配的surveyID。最後一個具有studentID,TeacherID,其餘列用於記錄回覆(Q1,Q2,Q3等)。調查ID未記錄在師生表中。此Web應用程序以前通過從Excel文件或Access數據庫導入數據來完成,該數據庫使用宏來分配調查和學生。

感謝,

詹姆斯

+0

是否 「其他」 現有的表有surveyID列呢?如果沒有它,你將無法分辨哪些學生被分配給哪個教師進行哪項調查。你試過什麼了? – rsbarro 2011-04-13 14:10:56

回答

3

假設至少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 
+0

謝謝你的代碼。數據庫是2008年。 – James 2011-04-13 14:36:19

+0

所以我只是被告知調查是按順序分配的(1,2,3,4)。這將如何改變代碼?謝謝,詹姆斯 – James 2011-04-13 16:24:47

1

我不完全得到你想要的學生,讓這裏的是一些代碼,採用第一部分的護理。隨機分配一個調查給老師。也許你可以用它來弄清楚你應該如何解決剩下的問題。

-- 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 
+0

謝謝你的代碼。我被告知,這項調查與學生參加一個計劃有關。我相信這項調查與學生的表現以及該計劃如何使他們受益有關。 – James 2011-04-13 14:33:45