Tidak perlu WHILE
lingkaran.
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
Juga, menjaga status_time
dalam tabel adalah kesalahan (kecuali itu adalah kolom terhitung yang tidak persisten). Anda secara efektif menyimpan data yang sama di dua tempat dalam database, yang pada akhirnya akan menghasilkan inkonsistensi. Hal yang sama berlaku untuk mendorong data ini ke tabel lain dengan waktu yang dibagi berdasarkan tipe status. Jangan membuat tabel baru untuk menyimpan data, gunakan kueri untuk mendapatkan data saat Anda membutuhkannya.