如何修复MySQL动态Pivot行转列时出现重复日期列的问题
问题原因
- 你的子查询使用了
SELECT DISTINCT scadenza, importo FROM ripartizione_rate,同时对日期和金额两个字段去重。同一个scadenza日期下存在多个不同的importo金额时,就会生成多条相同日期的聚合逻辑,最终导致出现重复的日期列。 - 另外你拼接查询语句时,
@answers和后面的FROM关键字之间缺少空格,可能会触发SQL语法错误。
修改方案
只需要将去重逻辑调整为仅针对scadenza字段,同时补全语句拼接的空格即可,修改后的完整存储过程如下:
BEGIN -- 可选:如果日期数量较多,先调整GROUP_CONCAT长度限制,避免内容截断 SET SESSION group_concat_max_len = 102400; SELECT GROUP_CONCAT( DISTINCT CONCAT("MAX(IF(scadenza='", scadenza, "', importo, '')) AS '", scadenza, "'") SEPARATOR ',' ) INTO @answers FROM ripartizione_rate; SET @query := CONCAT( 'SELECT condomino, anagrafica, ', @answers, ' FROM ripartizione_rate GROUP BY condomino, anagrafica' ); PREPARE statement FROM @query; EXECUTE statement; DEALLOCATE PREPARE statement; -- 释放预处理语句,避免资源占用 END
内容的提问来源于stack exchange,提问作者pippo
相关产品推荐
相关产品推荐

