您好,我需要帮助编写sql查询来计算两个员工的正常时间和超过时间的小时数,weeks.Here是我的时间表中的一个员工的数据。
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时,应将其添加到加班中。敬请指教。
发布于 2015-07-05 05:48:56
给定您的样本数据,如果您想要的结果如下:
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)Sample SQL Fiddle
我使用了MS SQL Server语法,但唯一特定于方言/系统的是用于提取星期的日期函数。
查询可以改进很多,但由于不知道您实际想要的结果或使用的数据库,我将跳过这一部分。
https://stackoverflow.com/questions/31225285
复制相似问题