MySQL动态透视表实现报错:关联两表时出现1064语法错误求助
问题排查与解决
你的SQL语法错误源于第一个SELECT语句中GROUP_CONCAT函数的括号未闭合,导致MySQL无法正确解析后续的FROM子句。
修正后的完整代码
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('SUM(CASE WHEN d.tag_id = ''', d.tag_id, ''' THEN d.tag_value ELSE 0 END) AS ''', d.tag_id, '''') ) INTO @sql FROM dapa_collector_tag_value d INNER JOIN dapa_collector_tag t ON d.tag_id = t.id; SET @sql = CONCAT( 'SELECT d.effective_date, ', @sql, ' ', 'FROM dapa_collector_tag_value d ', 'INNER JOIN dapa_collector_tag t ON d.tag_id = t.id ', 'GROUP BY d.effective_date' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
关键修正点
- 在
INTO @sql之前添加了闭合括号),确保GROUP_CONCAT函数的语法结构完整,让MySQL能正确识别函数范围与后续子句。 - 清理了代码中冗余的空格,保持语句可读性。
额外优化建议(可选)
如果希望透视列显示标签名称而非ID,可以将别名部分的d.tag_id替换为t.tag_name(假设t表存在tag_name字段),修改后的GROUP_CONCAT片段如下:
CONCAT('SUM(CASE WHEN d.tag_id = ''', d.tag_id, ''' THEN d.tag_value ELSE 0 END) AS ''', t.tag_name, '''')
内容的提问来源于stack exchange,提问作者hamed zarrabi
相关产品推荐
相关产品推荐

