Хорошо, у меня есть три таблицы, над которыми я работаю, чтобы создать сводную таблицу.Для простоты я буду ссылаться только на поля, которые я использую для этого.
employee-> userTblID, firstName, lastName
lms__trainings-> trainingID, trainingName
lms__complete-> completeID, trainingID, employeeID (userTblID)
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(b.trainingID = ''',F.trainingID, ''', b.completionDate, NULL)) AS ''', F.trainingName,"'")) INTO @sql FROM lms__trainings AS F INNER JOIN lms__complete AS G ON F.trainingID=G.trainingID;
SET @sql = CONCAT('SELECT a.userTblID, a.firstName, a.lastName, ', @sql, ' FROM employees AS a LEFT JOIN lms__complete AS b ON a.userTblID=b.employeeID WHERE a.cloudID=1 GROUP BY a.userTblID ORDER BY a.lastName');
PREPARE stmt FROM @sql;
EXECUTE stmt;
Создает штраф в таблице PIVOT, но он включает только столбцы trainingName, имеющие связанную запись в lms__complete.Если я удаляю внутреннее соединение из строки 2 или изменяю его на левое соединение (которое, по моему мнению, не ограничило бы его записями lms__complete и давало бы вам все trainingNames в lms__trainings), это выдает старую добрую ошибку 1064.
Я знаю, что это просто не отправляет все trainingID через процедуру.Я думаю, что мое ЛЕВОЕ СОЕДИНЕНИЕ в строке 3 должно быть ЛЕВЫМ СОЕДИНЕНИЕМ СОЮЗА между lms__trainings и lms__complete, но я не поместил правильные параметры поиска в Google за последние пару дней, чтобы найти то, что мне нужно.