Примерно так должно работать:
SELECT
school,
SUM(CASE WHEN status = 'fail' THEN 1 ELSE 0 END) as [fail],
SUM(CASE WHEN status = 'pass' THEN 1 ELSE 0 END) as [pass]
FROM Students
GROUP BY school
ORDER BY school
РЕДАКТИРОВАТЬ
Почти забыл, но вы также можете написать запрос так:
SELECT
school,
COUNT(CASE WHEN status = 'fail' THEN 1 END) as [fail],
COUNT(CASE WHEN status = 'pass' THEN 1 END) as [pass]
FROM Students
GROUP BY school
ORDER BY school
Я не уверен, есть ли какой-либо выигрыш в производительности со вторым запросом. Мое предположение было бы, если есть, это, вероятно, очень мало. Я склонен использовать первый запрос, потому что думаю, что он более понятен, но оба должны работать. Кроме того, у меня нет экземпляра MySql, с которым удобно тестировать, но согласно @Johan предложения ORDER BY не нужны.