Mysql 根据列的总和计算加班时间
我想计算每周超过40小时的工作时间Mysql 根据列的总和计算加班时间,mysql,sql,sql-server,select,if-statement,Mysql,Sql,Sql Server,Select,If Statement,我想计算每周超过40小时的工作时间 table = shift_log_data database = shift_logs Field Type Null Key Default Extra id int(100) NO PRI NULL auto_increment admin_hrs decimal(20,2) NO
table = shift_log_data
database = shift_logs
Field Type Null Key Default Extra
id int(100) NO PRI NULL auto_increment
admin_hrs decimal(20,2) NO 0.00
shop_hrs decimal(20,2) NO 0.00
fab_hrs decimal(20,2) NO 0.00
paint_hrs decimal(20,2) NO 0.00
vacation_hrs decimal(50,2) NO 0.00
control_hrs decimal(20,2) NO 0.00
test_hrs decimal(20,2) NO 0.00
engine_hrs decimal(20,2) NO 0.00
hydraulic_hrs decimal(20,2) NO 0.00
699_paint varchar(100) NO 0.00
699_shop varchar(100) NO 0.00
maint_hrs varchar(100) NO 0.00
date date NO NULL
name varchar(50) NO NULL
job varchar(50) NO NULL
需要使用日期字段的每周总计列admin\u hrs
至maint\u hrs
total。如果每周工作时间超过40小时,则制作一个名为“加班”的别名,显示剩余超过40小时的工作时间 我试过了
SELECT SUM(overtime)
FROM
(
SELECT name,
IF(SUM(test_hrs+fab_hrs+control_hrs+shop_hrs+paint_hrs+engine_hrs+hydraulic_hrs)>40,
SUM(test_hrs+fab_hrs+control_hrs+shop_hrs+paint_hrs+engine_hrs+hydraulic_hrs))-40,
0) AS overtime
FROM shift_log_data
GROUP BY name
) TOTAL_OVERTIME
试试这个:
SELECT s.Name, YEAR(s.Date), WEEKOFYEAR(s.date),
IF(SUM(test_hrs+fab_hrs+control_hrs+shop_hrs+paint_hrs+engine_hrs+hydraulic_hrs)>40,
SUM(test_hrs+fab_hrs+control_hrs+shop_hrs+paint_hrs+engine_hrs+hydraulic_hrs))-40,
0
) AS overtime
FROM shift_log_data s
GROUP BY s.Name, YEAR(s.Date), WEEKOFYEAR(s.date);
“…
admin\u hrs
至maint\u hrs
…”--maint\u hrs
是一个varchar
,而不是一个数字。699_油漆
和699_车间
也是如此。这没有道理。您的解决方案的实际问题是什么?有语法错误吗?计算结果是否有误?对表设计的一些批评-name
不是一个人的唯一标识符,您需要在person
表中使用某种唯一的person id fk。出于大致相似的原因,您可能还需要一个作业
表。此表可能应该标准化,因此有一个hours\u worked
字段(或者可能是minutes\u worked
,因为小时不能完全划分为10个基本分数),带有hour\u type
字段。为什么休假时间被计入总数?这听起来是可以利用的。或者,有一个带有时钟输入/输出时间(和类型)的表。是MySQL还是SQL Server?计算结果不正确。它不是每周分组或每周计算加班。