Для простоты подумайте, что у меня есть запрос, который возвращает строку на основе student_id, и содержит метки из шести викторин с именами столбцов, такими как Quiz1 Quiz2 Quiz3 Quiz4 Quiz5 Quiz6.Выберите три самых высоких значения, сравнив разные столбцы в строке?
Я хочу выбрать только верхние 3 наивысших знака, безопасные для учащегося, а затем взять его среднее значение, а затем сравнить это значение среднего с другим столбцом «Pass_Avg» , если значение показателя 3-го наивысшего теста больше, чем равное до значения «Pass_Avg», просто просто измените значение столбца результата на «P» else 'F'.
Так я пытался получить наибольшее значение, делая что-то вроде этого
SELECT
CASE
WHEN Quiz1 >= Quiz2 AND Quiz1 >= Quiz3 and Quiz1 >= Quiz4 and Quiz1 >= Quiz5 and Quiz1 >= Quiz6 THEN Quiz1
WHEN Quiz2 >= Quiz1 AND Quiz2 >= Quiz3 and Quiz2 >= Quiz4 and Quiz2 >= Quiz5 and Quiz2 >= Quiz6 THEN Quiz2
WHEN Quiz3 >= Quiz1 AND Quiz3 >= Quiz2 and Quiz3 >= Quiz4 and Quiz3 >= Quiz5 and Quiz3 >= Quiz6 THEN Quiz3
WHEN Quiz4 >= Quiz1 AND Quiz4 >= Quiz2 and Quiz4 >= Quiz3 and Quiz4 >= Quiz5 and Quiz4 >= Quiz6 THEN Quiz4
WHEN Quiz5 >= Quiz1 AND Quiz5 >= Quiz2 and Quiz5 >= Quiz3 and Quiz5 >= Quiz4 and Quiz5 >= Quiz6 THEN Quiz5
WHEN Quiz6 >= Quiz1 AND Quiz6 >= Quiz2 and Quiz6 >= Quiz3 and Quiz6 >= Quiz4 and Quiz6 >= Quiz5 THEN Quiz6
ELSE Quiz1
END AS Highest from dbo.Student where student_id= '01'
Может ли один пожалуйста предположить, что, как я должен попытаться сделать это, так как я имею затруднение в получении второго и третьего самая высокая значение .....
Итак, у каждого учащегося разные Pass_Avg? И вы принимаете три самых высоких результата теста ученика, добавляете их, делят сумму на три и сравниваете результат с Pass_Avg? Может ли быть NULL? Если да, разделите ли вы на два, если для ученика будет только два теста? –
Почему бы вам не сделать другую таблицу с результатами теста? Хранение значений строк (что и должно быть в результатах теста) в столбцах - это ужасный дизайн базы данных. Что, если в следующем году появится новая викторина? – Jcl
Сценарий разный, на самом деле я только меняю его для простоты и отвечу на ваши запросы: Итак, у каждого ученика есть другой Pass_Avg? ДА И вы принимаете три самых высоких результата теста ученика, добавляете их, делите сумму на три и сравниваете результат с Pass_Avg? ДА Может ли быть NULL? NO и если бы я мог изменить дизайн db, я бы определенно хотел бы, но я просто не могу надеяться, что вы понимаете :) –