Хранимая процедура SQL Server для случайного назначения опроса - PullRequest
2 голосов
/ 13 апреля 2011

Мне нужно сделать следующее: выбрать преподавателей из существующей таблицы, случайным образом назначить им 1 из 4 опросов и ввести инструкторов и назначенный опрос в существующую таблицу (teacherID, surveyID) и, наконец, случайно выбрать 5 из своих учеников.и запишите это в другую существующую таблицу (studentID и teacherID).

Как отдельные задачи это будет легко ... ошибаться, легче.

Не сделав этого, прежде чем я попытаюсь выяснитьлучший процесс.Создать временную таблицу, чтобы сначала сохранить учителей, а затем каким-то образом выполнить цикл (я никогда не делал это в хранимой процедуре), чтобы случайным образом назначать опросы, а затем вставлять их в таблицу опроса?Создайте еще одну временную таблицу для случайного выбора учеников учителя, а затем назначьте ее в таблицу учеников, участвующих в опросе?

В ответ на вопрос rsbarro ниже: Есть три таблицы.Один записывает название опроса и имеет автоматически увеличенное поле идентификатора.У другого есть идентификатор учителя и назначенный идентификатор опроса.Последний имеет идентификатор студента, идентификатор учителя, а остальные столбцы предназначены для записи ответов (Q1, Q2, Q3 и т. Д.).Идентификатор опроса не заносится в таблицу учитель-ученик.Ранее это веб-приложение создавалось путем импорта данных из файла Excel или базы данных Access, в которой использовался макрос для назначения опросов и учащихся.

Спасибо,

Джеймс

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Предполагается, по крайней мере, 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
1 голос
/ 13 апреля 2011

Я не совсем понимаю, что вы хотите со студентами, так что вот код, который заботится о первой части.Случайное назначение опроса учителю.Может быть, вы можете использовать это, чтобы выяснить, как вы должны решить, что осталось.

-- 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...