如何在SQL Server 2008中汇总类似员工的时间值

时间:2012-02-11 17:27:14

标签: sql sql-server-2008

我有三张桌子

  • 员工EmployeeID, EmployeeName
  • EmployeeTimeIn EID, Time_In, Date_Ref, State_Flag, HoursConsumed
  • EmployeeTimeOut EID, Time_Out, Date_Ref, State_Flag

我附上了包含样本数据的这些表的图像。

我需要编写一个查询,列出所有员工的ID,姓名和总时间。为此,我需要总结每个员工的时间价值。我写了这个查询,列出了timein和timeout表中列出的所有员工:

select e.EmployeeID, e.EmployeeName, e1.HoursConsumed
from EmployeeTimeIn as e1, Employee as e
where e1.EID = e.EmployeeID;

我想做这样的事情:

select e.EmployeeID, e.EmployeeName, SUM(e1.HoursConsumed)
from EmployeeTimeIn as e1, Employee as e
where e1.EID = e.EmployeeID;

HoursConsumed是一个时间字段。有什么想法吗?

Employee Tables

1 个答案:

答案 0 :(得分:0)

现在你的分组字段为varchar()或类似的类型,你可以这样做......

select e.EmployeeID, e.EmployeeName, SUM(DATEDIFF(ns, 0, e1.HoursConsumed))
from EmployeeTimeIn as e1, Employee as e
where e1.EID = e.EmployeeID;
group by e.EmployeeID, e.EmployeeName

根据您汇总的准确性,您可能会使用不同的时间单位。 TIME精确到100ns(默认情况下,最多也是如此),因此使用ns可以保持绝对精度,但更容易因大量数据而溢出:)

如果您需要将其转换回时间,可以使用以下内容:

DATEADD(ns, SUM(DATEDIFF(ns, 0, e1.HoursConsumed)), 0)