I have the following query to create a query that creates a pivot table.
If I execute SELECT * FROM @sql
I get the text stored in @sql
. (sorry for the redundancy...)
The problem is that although I have close to 200 entries in solar.sensors, I only get 16 displayed in the @sql
.
Is there any limitation in the number of entries that can be concatenated into a variable (in this case @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');
The content of @sql
is:
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