Det finns inget behov av en WHILE
loop.
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
Behåll också status_time
i tabellen är ett misstag (såvida det inte är en icke-beständig, beräknad kolumn). Du lagrar i praktiken samma data på två ställen i databasen, vilket kommer att leda till inkonsekvenser. Detsamma gäller för att skjuta in dessa data till en annan tabell med tider uppdelade efter statustyp. Skapa inte en ny tabell för att lagra data, använd frågan för att hämta data när du behöver den.