У меня есть запрос, который я вытащил из базы данных с информацией о студентах. Таблица имеет следующие столбцы: StudentID, CourseID, CourseGrade.
Столбец CourseGrade может содержать любое из следующих значений: «Удовлетворительно», «Выше среднего», «Средне», «Удовлетворительно», «Плохо» и, наконец, «Отказано».
К этим студентам будут прикреплены два консультанта для консультирования/репетиторства.
Примечание:Студент может быть зачислен только на один курс или на несколько курсов.
Каждый консультант должен быть назначен одинаковому количеству студентов (весь список студентов должен быть разделен пополам, если только нет нечетного количества уникальных идентификаторов StudentID, в этом случае у одного консультанта будет на одного студента больше). Независимо от количества курсов, на которые зачислен студент, ему должен быть назначен только 1 консультант.
Вот чего я хотел бы добиться:
Я хотел бы добавить четвертый столбец в таблицу под названием CounsellorNbr и пройтись по всем строкам в таблице и попеременно добавлять значение '1' и '2' к каждой записи студента. Опять же, если один и тот же StudentID появляется в соседних строках в нескольких курсах, оба должны получить один и тот же номер в этом новом столбце.
Приемлемая альтернатива добавлению столбца с номером 1 или 2, столбец StudentID может быть выделен одним из двух цветов. Если так проще.
Единственные программы, доступные мне для использования, это Microsoft Excel и Access. В конечном счете, я бы предпочел иметь возможность запустить макрос для выполнения этой задачи, поскольку это то, что часто приходится делать нетехническим людям, однако у меня возникли проблемы с определением того, какой тип функции понадобится для обхода списка, подобного этому, и добавления значений (или цветов ячеек), как я описал выше.
Я был бы очень признателен за любые полезные рекомендации или указания мест, с которых можно начать.
решение1
Установить D1
на 1, установить D2
на
=IF(A1=A2, D1, 3-D1)
и перетащите/заполните вниз. Это говорит: если StudentID в предыдущей строке равен StudentID в текущей строке, то это вторичная строка для этого Student (т. е. это часть многострочного кластера данных для Student, и это не первая строка). В этом случае CounsellorNbr для этой строки должен быть таким же, как CounsellorNbr для предыдущей строки (потому что обе строки для одного и того же студента). В противном случае ( A1
≠ A2
), это первая строка для студента, и поэтому мы хотим назначить другой CounsellorNbr из того, что в предыдущей строке. Есть разные способы сделать это, но самый простой — арифметический: вычесть из 3. 3−1=2 и 3−2=1.
Если в будущем у вас будет больше 2 консультантов (скажем, пять), вы можете заменить 3-D1
в приведенной выше формуле на несколько упрощенную
IF(D1=5, 1, D1+1)
который гласит: «если предыдущий студент получил последнего (5-го) консультанта, этот получает первого, в противном случае просто переходите к следующему консультанту», или несколько более артистично
MOD(D1,5)+1
что гласит: «возьмите предыдущий номер консультанта, разделите на 5, возьмите остаток и прибавьте 1». Это выглядит сложнее, чем есть на самом деле:
- 1÷5 равно 0 с остатком 1
- 2÷5 равно 0 с остатком 2
- 3÷5 равно 0 с остатком 3
- 4÷5 равно 0 с остатком 4
- 5÷5 равно 1 с остатком 0
поэтому это дает точно такой же результат, как и другая формула; добавляем единицу, если только мы не находимся на последней, в противном случае возвращаемся к первой.