Я хочу написать запрос, в котором перечислены программы, которые мы предлагаем в моем университете. Программа состоит из, по крайней мере, крупного и, возможно, «варианта», «специальности» и «подспециальности». Каждый из этих четырех элементов подробно описывается кодом, который связывает их с майором.Разбиение столбцов SQL в несколько столбцов на основе определенного значения столбца
Один майор может иметь ноль или более вариантов, один вариант может иметь ноль или больше специальностей, а одна специальность может иметь ноль или более специальностей. И наоборот, майору разрешено иметь никаких связанных с ним вариантов.
В результирующем наборе строка должна содержать предыдущий элемент, чтобы иметь следующую, т. Е. Строка не будет содержать основной, без параметров и специальность. Появление специальности, связанной с майором, подразумевает, что существует также опция, связанная с этим основным.
Моя проблема заключается в том, как хранятся данные. Все данные программы лежит в одной таблице, которая выкладывается, как это:
+----------------+---------------+------+
| program_name | program_level | code |
+----------------+---------------+------+
| Animal Science | Major | 1 |
| Equine | Option | 1 |
| Dairy | Option | 1 |
| CLD | Major | 2 |
| Thesis | Option | 2 |
| Non-Thesis | Option | 2 |
| Development | Specialty | 2 |
| General | Subspecialty | 2 |
| Rural | Subspecialty | 2 |
| Education | Major | 3 |
+----------------+---------------+------+
Желаемая выход будет выглядеть примерно так:
+----------------+-------------+----------------+-------------------+------+
| major_name | option_name | specialty_name | subspecialty_name | code |
+----------------+-------------+----------------+-------------------+------+
| Animal Science | Equine | | | 1 |
| Animal Science | Dairy | | | 1 |
| CLD | Thesis | Development | General | 2 |
| CLD | Thesis | Development | Rural | 2 |
| CLD | Non-Thesis | Development | General | 2 |
| CLD | Non-Thesis | Development | Rural | 2 |
| Education | | | | 3 |
+----------------+-------------+----------------+-------------------+------+
До сих пор я пытался создать четыре запроса, которые соединяются на этом «код», каждый из которых выбирается на основе другого «program_level». Однако поля не сочетаются должным образом.
Вы имеете 'Specialty' в данных выборки, но использовать' Speciality' в соединении (то же самое для 'Subspeciality'), и поэтому ваши соединения терпят неудачу. Если вы исправите эти опечатки, ваше заявление отлично работает –
@a_horse_with_no_name Хороший улов, мой плохой :) Я исправил свой запрос ниже. –