gpt4 book ai didi

mysql - 尝试使用存储过程在 MySQL 中创建 PIVOT,不会添加仅包含空记录的列

转载 作者:行者123 更新时间:2023-11-29 17:30:13 27 4
gpt4 key购买 nike

好的,我正在组合三个表来创建我的数据透视表。为简单起见,我将仅引用为此使用的字段。

员工->userTblID、名字、姓氏

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 表,但它只包含在 lms__complete 中具有关联记录的trainingName 列。如果我从第 2 行删除内部联接或将其更改为左联接(我认为这不会将其限制为 lms__complete 条目并为您提供 lms__trainings 中的所有训练名称),则会出现旧的 1064 错误。

我知道它只是没有通过该过程发送所有的训练ID。我认为第 3 行的 LEFT JOIN 应该是 lms__trainings 和 lms__complete 之间的 UNION 的 LEFT JOIN,但最近几天我没有在 google 中输入正确的搜索参数来找到我需要的内容。

最佳答案

Slorflare在这里确实给出了答案。诀窍是克服 group_concat_max_len 的默认值。

我通过设置做到了这一点

SET SESSION group_concat_max_len = 5000;

所以我的存储过程现在看起来像

SET @sql = NULL;
SET SESSION group_concat_max_len = 5000;

SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(b.trainingID = ''',F.trainingID, ''', b.completionDate, NULL)) AS ''', F.trainingName,"'")) INTO @sql FROM lms__trainings AS F LEFT 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;

关于mysql - 尝试使用存储过程在 MySQL 中创建 PIVOT,不会添加仅包含空记录的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com