我有以下查询来创建一个创建数据透视表的查询。
如果我执行SELECT * FROM @sql
,我会得到存储在@sql
中的文本。 (抱歉,冗余...)
问题是,尽管我在 Solar.sensors 中有接近 200 个条目,但在 @sql
中只显示了 16 个条目。
可以连接到变量中的条目数量(在本例中为 @sql
)是否有限制?
SELECT
GROUP_CONCAT(
CONCAT(
'MAX(CASE WHEN sensor_id = ', sensor_id,
' THEN power ELSE 0 END) AS "',sensor_id,
'"\n'
)
) INTO @sql
FROM solar.sensors;
SET @sql = CONCAT('SELECT date, ', @sql, '
FROM solar.agregated
GROUP BY date');
@sql
的内容是:
SELECT date, MAX(CASE WHEN sensor_id = 20 THEN power ELSE 0 END) AS "20"
,MAX(CASE WHEN sensor_id = 21 THEN power ELSE 0 END) AS "21"
,MAX(CASE WHEN sensor_id = 81 THEN power ELSE 0 END) AS "81"
,MAX(CASE WHEN sensor_id = 82 THEN power ELSE 0 END) AS "82"
,MAX(CASE WHEN sensor_id = 150 THEN power ELSE 0 END) AS "150"
,MAX(CASE WHEN sensor_id = 151 THEN power ELSE 0 END) AS "151"
,MAX(CASE WHEN sensor_id = 152 THEN power ELSE 0 END) AS "152"
,MAX(CASE WHEN sensor_id = 154 THEN power ELSE 0 END) AS "154"
,MAX(CASE WHEN sensor_id = 159 THEN power ELSE 0 END) AS "159"
,MAX(CASE WHEN sensor_id = 160 THEN power ELSE 0 END) AS "160"
,MAX(CASE WHEN sensor_id = 164 THEN power ELSE 0 END) AS "164"
,MAX(CASE WHEN sensor_id = 165 THEN power ELSE 0 END) AS "165"
,MAX(CASE WHEN sensor_id = 166 THEN power ELSE 0 END) AS "166"
,MAX(CASE WHEN sensor_id = 167 THEN power ELSE 0 END) AS "167"
,MAX(CASE WHEN sensor_id = 168 THEN power ELSE 0 END) AS "168"
,MAX(CASE WHEN sensor_id = 169 THEN power ELSE 0 END) AS "169"
FROM solar.agregated /*This is a view*/
GROUP BY date
最佳答案
问题的答案在这里: group_concat was cut when running a query on table
基本上可以连接的字符数是有限制的。 可以使用以下命令修改此类限制:
SET group_concat_max_len=150000000; /*or a very high number*/
关于mysql - 自动数据透视表创建的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540251/