I need to change a static query into a dynamic query in a stored procedure by associating the relative variables, using MySQL v5.
This is the static query
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM( CASE WHEN CONVERT ( tNumber, UNSIGNED INTEGER ) > 200 AND DATE_FORMAT(tStartDate, ''%Y%m'') =
''', DATE_FORMAT(period, '%Y%m'), ''' THEN 1 ELSE 0 END) `', DATE_FORMAT(period, '%b %Y'), '`'
)
) INTO @sql
FROM
(
SELECT DATE_FORMAT(tStartDate, '%Y-%m-01') period
FROM dotable_2025
WHERE DATE(tStartDate) BETWEEN MAKEDATE(year(now()),1)
AND LAST_DAY(MAKEDATE( YEAR ( CURDATE()), 360 ))
GROUP BY DATE_FORMAT(tStartDate, '%Y-%m-01')
) s;
This is the dynamic version where the table name changes from dotable_2025 to dotable_current_year
SET @a = CONCAT
('SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
SUM( CASE WHEN CONVERT ( tNumber, UNSIGNED INTEGER ) > 200 AND DATE_FORMAT(tStartDate, ''%Y%m'') =
', DATE_FORMAT(period, '%Y%m'), ' THEN 1 ELSE 0 END) `', DATE_FORMAT(period, '%b %Y'), '`
)
) INTO @sql
FROM
(
SELECT DATE_FORMAT(tStartDate, ''%Y-%m-01'') period
FROM dotable_', YEAR(CURDATE()) ,'
WHERE DATE(tStartDate) BETWEEN MAKEDATE(year(now()),1)
AND LAST_DAY(MAKEDATE( YEAR ( CURDATE()), 360 ))
GROUP BY DATE_FORMAT(tStartDate, ''%Y-%m-01'')
) s;');
PREPARE stmt FROM @a;
SET @a := NULL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
But when I execute the stored procedure I have this error and I don’t understand what I’m doing wrong
Procedure execution failed
1054 - Unknown column 'period' in 'field list'
Time: 0,045s