Я создаю онлайн-конкурс, в котором абитуриенты назначаются судье, и этот судья решает, переходят ли они к следующему раунду.Обнаружение TOP 5 из B для каждой записи в A
После того, как первый раунд закрывается, второй раунд получают в базе данных следующим образом:
Каждый участник/участник, который пропускается через округлить 2 выделяется 5 судей. Эти судьи должны распределяться в зависимости от того, сколько участников уже выделено им. Другими словами, каждый судья должен иметь такое же количество людей, чтобы судить во втором раунде.
В настоящее время у меня есть следующий оператор SQL в хранимой процедуре, которая называется 1 раз, когда конкуренция перемещается в раунд 2:
INSERT INTO recEntrantStatus (entrantId, roundId, judgeId, notified, voted, enterNextRound)
SELECT
r.entrantId,
(@input + 1),
j.Id /*Now getting tblJudges Id*/, -- fixed name
0,
0,
0
FROM recEntrantStatus r
-- Get all of the judges
CROSS JOIN (SELECT TOP(5) MEM.Id, ISNULL(ES.EntrantCount, 0) EntrantCount
FROM recMembers MEM
LEFT JOIN
(
SELECT judgeid, COUNT(judgeid) AS 'EntrantCount' -- name this
FROM recEntrantStatus
WHERE roundId = 1
GROUP BY judgeid
) ES ON MEM.Id = ES.judgeid
WHERE MEM.Privilege = 2
ORDER BY EntrantCount) AS j
WHERE r.roundId = @input
AND r.voted = 1
AND r.enterNextround = 1
Однако это только вычисляет 5 судей на один раз и распределяет этих 5 судей каждому участнику. Однако мне действительно нужно, чтобы 5 судей были пересчитаны для каждого участника, перенесенного в раунд 2.
Любые предложения по этому вопросу будут оценены.
EXTRA РАЗЪЯСНЕНИЕ
Таким образом, цель состоит в том, чтобы подсчитать, сколько записей каждый судья имеет в текущем раунде (roundId), а затем вычислить/выбрать 5 судей с наименьшим количеством записей. Затем он должен создать 5 новых записей в таблице «recEntrantStatus» для entrantId, причем каждая запись будет такой же, за исключением столбца «judId», который будет содержать соответствующую идею одного из 5 судей. В общей сложности пять записей, это означает, что каждый участник/участник будет иметь запись для каждого из 5 судей в текущем раунде.
Затем процесс будет повторяться для следующего идентифицированного участника/участника (r.entrantId). Поскольку мы просто добавили 5 новых записей, 5 судей с наименьшим количеством участников/записей будут изменены. Поэтому мы определяем, кто это, прежде чем создавать новую строку в db для каждого из этих 5 судей/участника.
SQL FIDDLE
http://sqlfiddle.com/#!6/426d5
Мне нужно было бы увидеть данные образца, текущие результаты и желаемые результаты, чтобы помочь. Или SQL Fiddle. –
Хорошо, я добавил дополнительную информацию, чтобы уточнить. –
Добавлена ссылка SQL Fiddle –