【发布时间】:2017-08-09 14:14:08
【问题描述】:
我有两张桌子
tbl_TimeEntries
EmployeeID int,
StartDateTime datetime,
EndDateTime datetime
tbl_Crew_Employees
CrewID,
EmployeeID,
StartDate,
EndDate
我还有一个查询,可以生成每位员工每天工作的小时数,但我还想包括该员工当天所在的工作人员。
SELECT tbl_TimeEntries.EmployeeID,
SUM(DATEDIFF(SECOND, StartDateTime, EndDateTime) / 60.0
/ 60.0) as Hours,
CAST(StartDateTime AS date) as WorkDate
FROM tbl_TimeEntries
GROUP BY tbl_TimeEntries.EmployeeID, CAST(StartDateTime AS date)
ORDER BY CAST(StartDateTime AS date)
我不确定如何在此查询中包含 CrewID,因为 tbl_Crew_Employees 使用 StartDate 和 EndDate(意味着员工从 StartDate 到 EndDate 一直在这个团队中)。我要么需要扩展 StartDate/EndDate 范围,要么使用某种我不知道的 SQL 魔法。
这是来自 tbl_Crew_Employees、tbl_TimeEntries 和当前查询的数据示例,其中添加了所需的列数据。 EmployeeID 88 代表样本中的两个不同的工作人员。
CrewID EmployeeID StartDate EndDate
13 11 2013-03-30 2013-05-12
12 88 2013-01-02 2013-04-18
12 66 2013-01-02 2013-06-30
13 88 2013-04-19 2013-04-21
11 111 2013-01-02 2013-04-28
EmployeeID StartDateTime EndDateTime
11 2013-04-18 08:00 2013-04-18 12:00
11 2013-04-18 12:30 2013-04-18 18:30
111 2013-04-18 10:00 2013-04-18 12:00
111 2013-04-18 12:30 2013-04-18 18:30
88 2013-04-18 11:00 2013-04-18 12:00
88 2013-04-18 12:30 2013-04-18 19:30
66 2013-04-18 10:00 2013-04-18 12:00
66 2013-04-18 12:30 2013-04-18 18:30
11 2013-04-20 08:00 2013-04-20 12:00
11 2013-04-20 12:30 2013-04-20 18:00
111 2013-04-20 10:00 2013-04-20 12:00
111 2013-04-20 12:30 2013-04-20 18:30
88 2013-04-20 11:00 2013-04-20 12:00
88 2013-04-20 12:30 2013-04-20 19:30
66 2013-04-20 10:00 2013-04-20 12:00
66 2013-04-20 12:30 2013-04-20 17:00
EmployeeID Hours WorkDate CrewID(desired)
11 10.00 2013-04-18 13
88 8.00 2013-04-18 12
66 8.00 2013-04-18 12
111 8.00 2013-04-18 11
11 7.50 2013-04-20 13
88 8.00 2013-04-20 13
66 6.50 2013-04-20 12
111 8.00 2013-04-20 11
【问题讨论】:
-
可以添加几行示例数据吗?
-
另外,请展示您希望最终结果的样子。
-
TimeEntries 的测试日期怎么样
-
是否可以在同一天工作人员之间的工作流程?
-
一名船员每天只能在一名船员上工作
标签: sql-server tsql