Привет всем, кто это читает,
После некоторого времени поиска я понял, что мне нужна сводная таблица. Однако он должен быть динамичным. В предложении where я настрою unit_id, и каждое учреждение будет либо учителем/начальной школой/средней школой, так что это означает, что имя столбца изменится по мере того, как возраст будет отличаться для каждого этапа жизни. (Мне нужно объединить возраст и пол вместе)
Это SQL-запрос, который я использовал.
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF("2018-08-31", date_of_birth)), "%Y")+0 AS 'Age', class.name AS 'Name',
CASE
WHEN gender_id = '1'
THEN 'M'
ELSE 'F'
END as Gender
from security_users AS 'su'
INNER JOIN institution_class_students AS 'cs'
ON su.id = cs.student_id
INNER JOIN institution_classes AS 'class'
ON cs.institution_class_id = class.id
WHERE cs.institution_id = 538
ORDER BY Name
Ниже приведен пример вывода для одного класса после выполнения вышеуказанного запроса.
Age Name Gender
3 Form 1-1 M
4 Form 1-1 F
4 Form 1-1 F
3 Form 1-1 F
3 Form 1-1 F
4 Form 1-1 M
4 Form 1-1 M
4 Form 1-1 F
5 Form 1-1 F
4 Form 1-1 F
3 Form 1-1 F
3 Form 1-1 F
3 Form 1-1 M
3 Form 1-1 M
4 Form 1-1 F
4 Form 1-1 F
5 Form 1-1 F
5 Form 1-1 F
4 Form 1-1 M
4 Form 1-1 M
Основываясь на вышеприведенном выше, это должен выглядеть мой результат. Если бы я баллотировался в учреждение со старшими учениками, это будет и т.д. 11-M, 11-F, 12-M, 12-F.
Class 3-M 3-F 4-M 4-F 5-M 5-F
Form 1-1 3 4 4 6 0 3
Ниже приведен пример того, как он должен выглядеть, если я буду баллотироваться в учреждение
Class 3-M 3-F 4-M 4-F 5-M 5-F
Form 1-2 5 6 3 2 0 1
Form 1-3 4 2 7 5 0 0
Form 2 0 0 4 1 7 1
Form 3 0 0 0 0 8 9
Можно ли это сделать? Я прочитал много учебников по сводной таблице, но мне трудно понять, как это сделать. Любой может пролить свет на это. Цените каждую помощь! Надеюсь, что приведенные выше детали легко понять.
См. Http://mysql.rjweb.org/doc.php/pivot. Он содержит (и объясняет) хранимую процедуру, которая просматривает таблицу, чтобы построить необходимый сводный запрос. Затем он выполняет его. CALL
для хранимой процедуры обеспечивает 6 аргументов, что обеспечивает большую гибкость, чем требуется большинству людей.