mysql根据条件计算OT小时数

时间:2015-07-28 09:57:21

标签: mysql sum

嗨,我有一张桌子otasub。

我需要计算总小时数(Reg_Hours),但不包括所有星期日。

ot_plot_date    ot_hr   ot_day     ot_hour_nextday  ot_nextday_day
2015-07-22      2.75    Wednesday   1.5             Thursday
2015-07-23      4.5     Thursday    2.75            Friday
2015-07-25      8       Saturday    3               Sunday
2015-07-19      8       Sunday      1.5             Monday

我的查询

SELECT `ot_plot_date`,`ot_hr`,ot_day, `ot_hour_nextday`,`ot_nextday_day`,
SUM(CASE WHEN otasub.ot_day <> 'Sunday' 
THEN ot_hr + ot_hour_nextday ELSE 0 END) as Reg_Hours
FROM `otasub`
GROUP BY otasub.`ID` , ot_day , ot_type_nextday

我得到的结果就是这个。

ot_plot_date    ot_hr   ot_day     ot_hour_nextday  ot_nextday_day Reg_Hours
2015-07-22      2.75    Wednesday   1.5             Thursday       4.25 
2015-07-23      4.5     Thursday    2.75            Friday         7.25
2015-07-25      8       Saturday    3               Sunday         **11**
2015-07-19      8       Sunday      1.5             Monday         1.5

我希望看到的结果就是这个。

ot_plot_date    ot_hr   ot_day     ot_hour_nextday  ot_nextday_day Reg_Hours
2015-07-22      2.75    Wednesday   1.5             Thursday       4.25 
2015-07-23      4.5     Thursday    2.75            Friday         7.25
2015-07-25      8       Saturday    3               Sunday         **8**
2015-07-19      8       Sunday      1.5             Monday         1.5

1 个答案:

答案 0 :(得分:0)

您正在使用的查询正在给出您应该期望的答案,因为您仅在ot_day ='Sunday'而非ot_nextday_day ='Sunday'时使用特殊的“星期日”逻辑。也许你的意思是你的查询:

SELECT `ot_plot_date`,`ot_plot_total_hr`,ot_day, `ot_nextday`,`ot_nextday_day`,
SUM(CASE WHEN otasub.ot_nextday_day <> 'Sunday' 
THEN ot_plot_total_hr + ot_nextday ELSE ot_nextday END) as Reg_Hours
FROM `otasub`
GROUP BY otasub.`ID` , ot_day , ot_type_nextday

注意CASE逻辑中的更改以检查ot_nextday_day而不是ot_day。

此外,作为次要问题,您的查询中的字段名称与您在此处显示的表结构中的字段名称不匹配。特别是ot_plot_total_hr和ot_hour_nextday列。