2
我想計算每週工作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 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_hrs
通過每週maint_hrs
總數。
如果小時數大於每週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
_ 「...''通過maint_hrs' admin_hrs' ......」 _ - 'maint_hrs'是'varchar',不是一個數字。 「699_paint」和「699_shop」也是如此。這根本不符合邏輯。 –
解決方案的實際問題是什麼?有語法錯誤嗎?計算結果是否錯誤? –
對桌子設計的一些批評 - 「名字」不是一個人的唯一標識符,你需要某種獨特的人身份證fk到「人」桌。你可能也需要一份「工作表」,原因大致相同。這個表格應該是標準化的,所以有一個'hours_worked'字段(或者'minutes_worked',因爲一個小時不會乾淨地劃分爲10個基數部分),並且有一個'hour_type'字段。爲什麼**假期**小時計入總數?這聽起來是可利用的。另外,有一個表有一個clockin/out時間(和類型)。這是什麼,MySQL或SQL Server? –