gpt4 book ai didi

MySQL 动态数据透视表没有给出正确的结果

转载 作者:行者123 更新时间:2023-11-30 21:51:41 25 4
gpt4 key购买 nike

我有点像 SQL 菜鸟,但我正在尝试编写三个表之间的数据透视表。我有以下查询,除了 MAX 调用外,它工作得很好。它会导致我的值小于默认值被覆盖。我在下面有我的表格的屏幕截图。关于如何解决此问题的任何想法?

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(cc.company_config_key_id = ', cck.id, ', cc.config_value, \'', cck.default, '\')) AS ', cck.company_config_key
)
) INTO @sql
FROM company_config cc
LEFT JOIN company_config_key cck
ON cck.id = cc.company_config_key_id;
SET @sql = CONCAT('SELECT co.id, co.name, ', @sql, ' FROM companies co LEFT JOIN company_config cc ON cc.company_id = co.id GROUP BY co.id');
PREPARE stmt FROM @sql;
EXECUTE stmt;

公司:

Companies table

公司配置 key :

company_config_key table

公司配置:

company_config table

结果(应设置公司 1 和 2 的辅助色):

query result

最佳答案

事实证明,我只需要将内部 if 语句设置为 NULL,然后将 max 语句包装在 IFNULL 中。

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('IFNULL(MAX(IF(cc.company_config_key_id = ', cck.id, ', cc.config_value, NULL)), \'', cck.default, '\') AS ',cck.company_config_key)
) INTO @sql
FROM company_config cc
LEFT JOIN company_config_key cck
ON cck.id = cc.company_config_key_id;
SET @sql = CONCAT('SELECT co.id, co.name, ', @sql, ' FROM companies co LEFT JOIN company_config cc ON cc.company_id = co.id GROUP BY co.id');
SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;

关于MySQL 动态数据透视表没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940736/

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