自动数据透视表创建的限制

时间:2015-02-16 11:18:52

标签: mysql

我有以下查询来创建一个创建数据透视表的查询。 如果我执行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

1 个答案:

答案 0 :(得分:1)

这里回答的问题是: group_concat was cut when running a query on table

基本上可以连接的字符数有限制。 可以使用以下命令修改此限制:

SET group_concat_max_len=150000000; /*or a very high number*/