SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'SUM(CASE WHEN date = ''', date, ''' THEN hours ELSE 0 END) AS ', DATE_FORMAT(date, '%d-%m-%Y') ) ) INTO @sql FROM attendance WHERE date BETWEEN '2023-04-01' AND '2023-04-07'; -- Change date range as needed SET @sql = CONCAT('SELECT name, ', @sql, ' FROM attendance WHERE date BETWEEN ''2023-04-01'' AND ''2023-04-07'' -- Change date range as needed GROUP BY name'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;