表结构大概类似这样。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
uselessVisitor 2021-06-10 10:31:24 +08:00
max 这个为 null 了?
|