Как суммировать значения времени схожих сотрудников в SQL Server 2008 - PullRequest
0 голосов
/ 11 февраля 2012

У меня три таблицы

  • Сотрудник : EmployeeID, EmployeeName
  • EmployeeTimeIn : EID, Time_In, Date_Ref, State_Flag, HoursConsumed
  • EmployeeTimeOut : EID, Time_Out, Date_Ref, State_Flag

Я приложил изображение этих таблиц, содержащих примеры данных.

Мне нужно написать запрос, в котором будут перечислены все сотрудники с идентификатором, имя и общее время, которое они потребляли.Для этого мне нужно подвести итоги времени каждого сотрудника.Я написал этот запрос, в котором перечислены все сотрудники, которые перечислены в таблицах 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 голосов
/ 11 февраля 2012

Теперь, когда у вас есть поля группировки как 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

В зависимости от точности того, что вы суммируете, вы можете использовать другую единицу времени. ВРЕМЯ с точностью до 100 нс (по умолчанию и в лучшем случае), поэтому использование ns поддерживает абсолютную точность, но с большей вероятностью переполняется большими объемами данных:)

Если вам нужно преобразовать его обратно во время, вы можете использовать что-то вроде:

DATEADD(ns, SUM(DATEDIFF(ns, 0, e1.HoursConsumed)), 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...