Sql 正常工作时间和加班时间的计算
您好,我需要帮助编写sql查询,以计算两周内员工的正常工作时间和加班时间。以下是我的时间表表中一名员工的数据Sql 正常工作时间和加班时间的计算,sql,sql-server-2008,Sql,Sql Server 2008,您好,我需要帮助编写sql查询,以计算两周内员工的正常工作时间和加班时间。以下是我的时间表表中一名员工的数据 Username hours date JohnSmith 3.75 5/25/2015 JohnSmith 11 5/26/2015 JohnSmith 10.25 5/27/2015 JohnSmith 13 5/28/2015 JohnSmith 13 5
Username hours date
JohnSmith 3.75 5/25/2015
JohnSmith 11 5/26/2015
JohnSmith 10.25 5/27/2015
JohnSmith 13 5/28/2015
JohnSmith 13 5/29/2015
JohnSmith 14 5/30/2015
JohnSmith 9 5/31/2015
JohnSmith 12 6/1/2015
JohnSmith 12.5 6/2/2015
如果工时>40,则将其添加到加班工时中。这听起来很简单,因为我很难做到这一点。如果我把小时数加起来,这两周的总时间超过80小时。我应该如何求和,以便当总和大于40时,应将其添加到加班中。请给出建议。根据您的样本数据,如果您想要的结果是这样的:
Username Week total Non_overtime Overtime
JohnSmith 22 65.00 40.00 25.00
JohnSmith 23 33.50 33.50 0.00
这样的查询应该接近您想要的:
select
Username
, datepart(week,date) as Week
, sum(hours) total
, case when sum(hours) <= 40 then sum(hours) else 40 end as Non_overtime
, case when sum(hours) > 40 then sum(hours) - 40 else 0 end as Overtime
from t
group by Username, datepart(week, date)
选择
用户名
,日期部分(周,日期)为周
,总计(小时)
,当总和(小时数)40时,则总和(小时数)-40,否则0作为加班结束
从t
按用户名、日期分组(周、日期)
我使用了MS SQL Server语法,但唯一特定于方言/系统的是用于提取星期的日期函数
查询可以改进很多,但在不知道您实际想要什么结果或使用什么数据库的情况下,我将跳过这一部分。我假设您所说的“总和大于40”是指在给定的一周内?请澄清?结果应该是什么样的?还有,你在使用什么数据库?非常感谢你的帮助。这对我来说很有意义。由于某种原因,datepart不适合我。它说标识符“week”并不是指列、表或属性您使用的数据库和版本是什么?这可能是语法上的差异。是的,一周40个小时可以修改sql server2008@user2233326MSSQL 2008使用
datepart(周,您的日期列)
应该可以工作。请注意,week
周围不应该有任何引号,因为它是函数期望作为文本的关键字。请参见以下SQL Fiddle工作示例: