Суммированные часы, отработанные на основе двух уникальных идентификаторов - PullRequest
0 голосов
/ 25 октября 2019

Я хочу подытожить общее количество часов, отработанных за данный двухнедельный период (период оплаты) для сотрудников компании. У меня есть представление, которое вытягивает столбец для уникальных идентификаторов сотрудников [CODE_USER], столбец для уникально идентифицированных типов оплаты (Обычная, Сверхурочная работа, Выходные, Отпуск и т. Д.) [Код], столбец для общего количества отработанных часов [Часы]столбец для каждого дня рабочей недели [Day].

В нынешнем виде в столбце [Hours] показано общее количество часов, отработанных в течение дня для каждого уникального сотрудника (на основе уникального типа оплаты,например, обычные часы или сверхурочные часы).

Мне нужно объединить все рабочие часы за двухнедельный период для каждого сотрудника [CODE_USER], для каждого вида оплаты [CODE] в сводный столбец с именем «Часы»,

Идеальный конечный результат будет выглядеть примерно следующим образом, учитывая, что ID сотрудника работал 80 обычных часов и 20 сверхурочных часов в течение двух недель (E1 равняется обычным часам, E2 равняется сверхурочным часам):

CODE_USER   Code    Hours   
  125       E1       80.00  
  125       E2       20.00

Самым близким, я думаю, что я нашел решение, был бы следующий код, однако он не СУММА часов работал для уникального CODE_USER в течение двухнедельного периода, он перечисляет часы, отработанные для каждого дня в течение двухнедельный период как набор строк для этого сотрудника. Например, следующий код показывает 18 строк для идентификатора сотрудника 125, сотрудник проработал 10 полных 8,00 часовых дней в течение периода времени, отмеченного E1 (обычный), и было 8 раз, когда сотрудник работал сверхурочно часов, отмеченных E2 (сверхурочные).

КОД:

SELECT [CODE_USER], 
   [Code],
   SUM(Hours) AS Hours,
   [Day]
FROM [LookUp].[dbo].[Daily_Hours_Worked]
WHERE [Day] >= '20191007' AND [Day] < '20191019'
AND [CODE_USER] LIKE '%125%'
GROUP BY [CODE_USER], [Code], [Hours], [Day]
ORDER BY [CODE_USER], [Day] DESC;

РЕЗУЛЬТАТЫ:

CODE_USER   Code    Hours   Day
  125       E1       8.00   2019-10-18 00:00:00.000
  125       E2       0.70   2019-10-18 00:00:00.000
  125       E1       8.00   2019-10-17 00:00:00.000
  125       E2       1.65   2019-10-17 00:00:00.000
  125       E1       8.00   2019-10-16 00:00:00.000
  125       E2       1.15   2019-10-16 00:00:00.000
  125       E1       8.00   2019-10-15 00:00:00.000
  125       E2       0.97   2019-10-15 00:00:00.000
  125       E1       8.00   2019-10-14 00:00:00.000
  125       E2       1.99   2019-10-14 00:00:00.000
  125       E1       8.00   2019-10-11 00:00:00.000
  125       E2       0.12   2019-10-11 00:00:00.000
  125       E1       8.00   2019-10-10 00:00:00.000
  125       E2       0.05   2019-10-10 00:00:00.000
  125       E1       8.00   2019-10-09 00:00:00.000
  125       E2       0.10   2019-10-09 00:00:00.000
  125       E1       7.99   2019-10-08 00:00:00.000
  125       E1       7.99   2019-10-07 00:00:00.000

Ожидаемые результаты:

Я хочу увидеть сумму E1, E2,и т. д. для входного периода оплаты (2-недельного периода) для каждого уникального идентификатора сотрудника [CODE_USER] в таблице. Конечным результатом должно быть две строки для каждого сотрудника с обычным временем (E1) и сверхурочной работой (E2), в которых Суммы, которые часы сотрудника работали для каждой категории в течение данного периода времени.

1 Ответ

2 голосов
/ 25 октября 2019

Разве это не просто, что вы должны удалить день из группировки, а конкретного сотрудника из предложения where?

SELECT [CODE_USER], 
   [Code],
   SUM(Hours) AS Hours
FROM [LookUp].[dbo].[Daily_Hours_Worked]
WHERE [Day] >= '20191007' AND [Day] < '20191019'
GROUP BY [CODE_USER], [Code]
ORDER BY [CODE_USER]

Вам не нужно группировать по часам;ты суммируешь это. Ситуации, когда вы должны группировать по столбцу, который вы также агрегируете, редки

Я не совсем понимаю, почему вы говорите две недели, а даты в вашем предложении where не равны двум неделям;Что делать, если кто-то работает на выходных? Я оставил эту часть, просто хотел поднять ее, так как странно, что вы делаете 12 дней, то есть включаете только каждые другие выходные (если задание запускается раз в две недели)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...