Il n'y a pas besoin d'un WHILE
boucle.
SELECT
date,
id,
SUM(CASE WHEN status_id = 1 THEN status_time ELSE 0 END) AS lunch,
SUM(CASE WHEN status_id = 2 THEN status_time ELSE 0 END) AS break,
SUM(CASE WHEN status_id = 3 THEN status_time ELSE 0 END) AS vacation
FROM
My_Table
GROUP BY
date,
id
Aussi, en gardant le status_time
dans le tableau est une erreur (sauf s'il s'agit d'une colonne calculée non persistante). Vous stockez effectivement les mêmes données à deux endroits dans la base de données, ce qui finira par entraîner des incohérences. Il en va de même pour pousser ces données dans une autre table avec des heures ventilées par type de statut. Ne créez pas une nouvelle table pour contenir les données, utilisez la requête pour obtenir les données lorsque vous en avez besoin.