Мне было очень полезно понять, что конструктор копирования вызывается при назначении следующим образом:
class Base { };
class Derived : public Base { };
Derived x; /* Derived type object created */
Base y = x; /* Copy is made (using Base's copy constructor), so y really is of type Base. Copy can cause "slicing" btw. */
Так как y является фактическим объектом класса Base, а не оригинальным, функции, вызываемые это функции базы.
Список выбора SQL должен быть исправлен во время написания запроса. Вы не можете сделать SQL, который автоматически расширяет свои столбцы на основе найденных данных.
Но ваш запрос является общим, он называется сводной таблицей или таблицей кросс-таблицы.
Единственное решение состоит в том, чтобы сделать это несколькими этапами:
Это справедливо для всех баз данных SQL, а не только для MySQL.
См. MySQL pivot row в динамическое число столбцов для высокопринятого решения для создания запроса сводной таблицы в MySQL.
Я не голосую ваш вопрос как дубликат этого вопроса, потому что ваш запрос также включает transport_id, что сделает решение для запросов немного другим. Но вы должны прочитать о других решениях с поворотным столом.