Я согласен со всеми остальными, что ваша исходная таблица и желаемый результат имеют плохой дизайн. Хотя вы, вероятно, ничего не можете сделать с вашей исходной таблицей, я рекомендую следующий код и вывод:
Select id, name, date, school from MyTable;
union
Select id, name, date, school1 from MyTable;
(repeat as necessary)
Это даст вам результаты в формате:
id name date school
1 john 11/11/2001 nyu
1 john 11/11/2001 ucla
2 paul 11/11/2011 mit
2 paul 11/11/2011 uft
(Примечание: в моей версии SQL запросы на объединение автоматически выбирают разные записи, поэтому флаг отдельный не требуется)
С помощью этого формата вы можете легко подсчитать количество школ на одного учащегося, количество учеников на одну школу и т. Д.
Если здесь учитывается время обработки и / или объем памяти, вы можете разделить это на 2 таблицы, 1 с идентификатором, именем и датой, а другую с идентификатором и школой (в основном то, что только что сказал JonH). Но если вы просто работаете с простой статистикой, этого должно быть достаточно.