Отдельное время прихода и ухода для каждой даты - PullRequest
0 голосов
/ 26 мая 2020

У меня есть простая таблица, в которой записываются приходы и уходы людей, вот так.

Id     | EmployeeNumber | InOutDateTime
-----------------------------------------------------
1      | 505            | 2020-03-24 08:32:42:000
2      | 506            | 2020-03-24 08:35:47:000
3      | 507            | 2020-03-24 08:46:12:000
4      | 505            | 2020-03-24 16:59:00:000
5      | 506            | 2020-03-24 17:05:00:000
6      | 508            | 2020-03-24 17:46:12:000

Я хочу разделить приход и уход для каждой даты.

Итак, основываясь на приведенной выше таблице, я хочу получить следующие результаты:

EmployeeNumber | InDateTime               | OutDateTime
----------------------------------------------------------------------
505            | 2020-03-24 08:32:42:000  | 2020-03-24 16:59:00:000
506            | 2020-03-24 08:35:47:000  | 2020-03-24 17:05:00:000
507            | 2020-03-24 08:46:12:000  | null
508            | null                     | 2020-03-24 17:46:12:000

Я играл с подзапросом и группировкой, но не получил этого. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 26 мая 2020

Возможное решение - это следующее утверждение, но важный вопрос заключается в том, как решить, когда InOutDateTime равно In или Out для одного EmployeeNumber ввода:

Таблица:

CREATE TABLE Data (
   Id int,
   EmployeeNumber int,
   InOutDateTime datetime
)
INSERT INTO Data (Id, EmployeeNumber, InOutDateTime)
VALUES
   (1, 505, '2020-03-24T08:32:42'),
   (2, 506, '2020-03-24T08:35:47'),
   (3, 507, '2020-03-24T08:46:12'),
   (4, 505, '2020-03-24T16:59:00'),
   (5, 506, '2020-03-24T17:05:00'),
   (6, 508, '2020-03-24T17:46:12')

Заявление:

SELECT 
   EmployeeNumber, 
   MIN(CASE WHEN DATEPART(hour, InOutDateTime) <= 12 THEN InOutDateTime END) AS InDateTime,
   MAX(CASE WHEN DATEPART(hour, InOutDateTime) > 12 THEN InOutDateTime END) AS OutDateTime
FROM Data
GROUP BY EmployeeNumber, CONVERT(date, InOutDateTime)
ORDER BY EmployeeNumber, CONVERT(date, InOutDateTime)

Результат:

EmployeeNumber  InDateTime              OutDateTime
505             2020-03-24 08:32:42.000 2020-03-24 16:59:00.000
506             2020-03-24 08:35:47.000 2020-03-24 17:05:00.000
507             2020-03-24 08:46:12.000 
508                                     2020-03-24 17:46:12.000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...