Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Insertion et transformation de données à partir d'une table SQL

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.