我有一个问题一直困扰着我几天.我有一张桌子:
>日期
> ID
> Status_ID
> Start_Time
> End_Time
> Status_Time(秒)(他们如何处于特定状态,以秒为单位)
我想将此数据放在另一个表中,该表将Status_ID分组为列.此表包含如下列:
>日期
> ID
>午餐(以秒为单位)
>休息(以秒为单位)
>假期,(以秒为单位)等
因此,Status_ID 2和3可能会在休假,Status_ID 1午餐等分组.
我曾想过在一个while循环中嵌套一个Case,遍历每一行以插入到我的另一个表中.但是,我无法将这些数据从行中的Status_ID插入到现在按其分组的列中.
解决方法
不需要WHILE循环.
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
此外,将status_time保留在表中是一个错误(除非它是非持久的计算列).您实际上是将相同的数据存储在数据库中的两个位置,这最终会导致不一致.将此数据推送到另一个表中也是如此,其中按状态类型划分时间.不要创建新表来保存数据,使用查询在需要时获取数据.