
表结构大概类似这样。name,time,score,想要的查询是动态的将行值转化为列名,做透视。 我使用了拼接字符串进行,动态的查询,脚本如下
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(a.name = ''', a.name, ''', a.score, 0)) AS ''', a.name, '''' ) ) INTO @sql FROM student_score a; SET @sql = CONCAT('Select time,', @sql, ' From `student_score` a Group by a.time' ); PREPARE stmt FROM @sql; -- 动态生成脚本 EXECUTE stmt; -- 动态执行脚本 DEALLOCATE PREPARE stmt; 我跑了一下,发现数据量不多的时候,这样查询没问题,当我数据有几十万的时候,转化为列大概有两百多列,就报错了。请教各位 v2er 怎么动态的将几十万数据行值转为列
1 akira 2021-06-08 23:44:11 +08:00 先不说这个需求是否合理。 报错信息呢 |
3 zm8m93Q1e5otOC69 2021-06-10 10:31:24 +08:00 max 这个为 null 了? |