Мы можем использовать оператор SELECT для школы GROUP BY, чтобы создать запись для каждой школы. Как вы заметили, столбцы связей, выигрышей и проигрышей легко рассчитываются с помощью агрегатной функции SUM. Чтобы нацелиться на определенный раунд, мы можем использовать некоторую умную математику (чтобы избежать многословных условных выражений, подобных предложенному CodeByMoonlight):
Если мы хотим нацелиться на раунд R, отметим, что «раунд-R» равен 0 только тогда, когда раунд == R, в противном случае он не равен 0. Когда мы принимаем NOT для «раунд-R», 0 инвертируется в 1, в то время как все остальное установлено в 0. Теперь, если мы умножим! (раунд-R) на результат этого раунда, это даст нам 0, когда раунд не R (так как 0 * оценка = 0), и это даст нам «счет», когда раунд R (как 1 * оценка = оценка). Затем, когда мы берем СУММУ этого значения по столбцам, мы добавляем счет, когда раунд = R и 0 в противном случае, фактически давая нам только раунд R счет.
Если сложить все вместе, то получим:
SELECT school AS `School`,
SUM(!(round-1)*score) AS `Round1`,
SUM(!(round-2)*score) AS `Round2`,
SUM(!(round-3)*score) AS `Round3`,
SUM(!(round-4)*score) AS `Round4`,
SUM(!(round-5)*score) AS `Round5`,
SUM(!(round-6)*score) AS `Round6`,
SUM(!(round-7)*score) AS `Round7`,
SUM(!(round-8)*score) AS `Round8`,
SUM(!(round-9)*score) AS `Round9`,
SUM(!(round-10)*score) AS `Round10`,
SUM(win) AS `wins`,
SUM(loss) AS `losses`,
SUM(tie) AS `ties`
FROM `RoundScores` GROUP BY `school`
где RoundScores - рассматриваемая таблица.
EDIT:
Если мы не хотим вручную добавлять 10, мы можем использовать подготовленные операторы :
# Store all the conditionals in a string:
# I was not able to to have round loop from 1 to 10, so I iterated over
# all distinct values of 'round' present in the table.
SET @s = "";
SELECT `round`, (@s := CONCAT( @s , "SUM(!(round-",round, ")*score) AS `Round",round, "`," )) FROM `RoundScores` GROUP BY `round`;
# Combine the conditionals from before with the rest of the statement needed.
SET @qry = CONCAT("SELECT school AS `School`,",@s,"SUM(win) AS `wins`,SUM(loss) AS `losses` FROM `RoundScores` GROUP BY `school`");
# Prepare and execute the statement.
PREPARE stmt1 FROM @qry;
EXECUTE stmt1;