我被一些MS SQL工作抛到脑后,我谦卑地请求帮助。我正在学习基础知识但是我的作业远远高于我的技能水平。我被要求提供一个查询,该查询将显示使用我们的时钟数据库为每个作业代码工作了多少小时。以下是该表的示例。
employeeid Jobcode TimeIn TimeOut
18405 4 2014-08-08 06:55:00 2014-08-08 09:14:00
19000 4 2014-08-08 09:27:00 2014-08-08 11:04:00
20205 4 2014-08-08 11:33:00 NULL
18406 13 2014-08-08 06:57:00 2014-08-08 09:01:00
18405 13 2014-08-08 09:16:00 2014-08-08 11:03:00
18406 13 2014-08-08 11:33:00 NULL
18407 19 2014-08-08 08:25:00 2014-08-08 12:03:00
18411 19 2014-08-08 07:59:00 2014-08-08 11:01:00
我想要显示的是运行查询时每个作业代码的总小时数。
Job Code Minutes
1 500
2 700
3 200
以下是我使用的查询:
select eh.jobcode, datediff(mi, eh.TimeIn, isnull(eh.TimeOut, DateAdd(HH,2,Getdate()))) as Minutes
FROM [TimeClockPlus].[dbo].EmployeeHours as eh inner join
[TimeClockPlus]. [dbo].employeelist as el ON eh.employeeid = el.employeeid
WHERE el.department = 'WAREHOUSE' and eh.timein
>= dateadd(dd, datediff(dd, 0, getdate()), 0)
and eh.timein < dateadd(dd, datediff(dd, 0, getdate()), +1)
Group by datediff(mi, eh.TimeIn, isnull(eh.TimeOut, DateAdd(HH,2,Getdate()))) , eh.Jobcode
但是我为每个作业代码获取了多行,我是不是正确理解GROUP BY?
按照eh.jobcode&#39;排序的结果示例添加到最后:
jobcode Minutes
1 69
1 127
1 112
1 24
1 105
2 134
2 53
2 101
4 80
4 9
4 105
4 94
4 129
4 119
5 15
5 103
5 23
5 28
5 33
5 91
答案 0 :(得分:0)
您的查询差不多完成了。我相信如果你按照工作代码分组并在日期中添加一笔金额就足够了。如果你希望它看起来很好,你可以在CTE中使用datediff构建你的选择,然后按照你新创建的CTE进行分组和总结。
答案 1 :(得分:0)
在我看来,问题是你有使用相同工作代码的员工ID,这就是你得到重复的原因。为了解决这个问题,我建议您使用datediff(minute
函数来获取分钟数,但如果有意义的话,也可以使用select语句中的SUM()
函数来计算分数。
如果您无法申请SUM(datediff(minute
,请尝试查看: