У меня есть таблица для записи времени входа и выхода сотрудников.Моя таблица:
CREATE TABLE [dbo].[tbl_attendanceSheet] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[memberCode] NVARCHAR (20) NULL,
[name] NVARCHAR (20) NULL,
[date] date NULL,
[clockin] time NULL,
[clockout] time NULL,
[delay] time NULL,
[HouresWorked] time NULL,
[desc] NVARCHAR (150) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Я хочу реализовать эту логику:
IF ClockIn exists and ClockOut exists, Insert the value into ClockIn(new row).
IF ClockIn doesnt exist and ClockOut doesnt exist, Insert the value into ClockIn.
IF ClockIn exists and ClockOut doesnt exist, Insert the value into ClockOut.
Я могу реализовать вставку и выключение часов без проверки друг друга, моя проблема в том, как проверить, если одинсуществует, и если так, другой должен быть обновлен при необходимости.
Что я попробовал сам:
CREATE PROCEDURE InputClock
@QmemberCode nvarchar(20),
@InputName nvarchar(20),
@InputDate Date,
@InputTime time
as
IF NOT EXISTS (SELECT TOP 1 clockin FROM tbl_attendanceSheet WHERE memberCode=@QmemberCode ORDER BY ClockIn DESC) AND NOT EXISTS (SELECT TOP 1 clockout FROM tbl_attendanceSheet WHERE memberCode=@QmemberCode ORDER BY ClockOut DESC)
BEGIN
Insert Into tbl_attendanceSheet(memberCode,name,date,clockIn) Values (@QmemberCode,@InputName,@InputDate,@InputTime)
END
ELSE IF EXISTS (SELECT TOP 1 clockin FROM tbl_attendanceSheet WHERE memberCode=@QmemberCode ORDER BY ClockIn DESC) AND NOT EXISTS (SELECT TOP 1 clockout FROM tbl_attendanceSheet WHERE memberCode=@QmemberCode ORDER BY ClockOut DESC)
BEGIN
Insert Into tbl_attendanceSheet(memberCode,name,date,clockout) Values (@QmemberCode,@InputName,@InputDate,@InputTime)
END
Это не работает, потому что, когда столбец clockIn имеет значение и clockOutВ столбце не указывается значение времени в столбце clockOut.
Зачем мне нужна эта логика?Потому что есть несколько сотрудников , которые будут приходить утром в любом порядке и не выходить ночью в том же порядке.Таким образом, система должна выяснить, кто раньше синхронизировал In, чтобы синхронизировать его, а кто ничего не делал прежде, чтобы синхронизировать его.
что я хочу представить по-другому: давайте предположим, что это моя таблица:
[memberCode] | [name] | [ClockIn]| [ClockOut]
Утром приходит Алекс и приходит время
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 Alex 09:00:00
Приходит Джейми и приходит время
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 Alex 09:00:00
122 jamy 09:00:20
Приходит Нео и часы
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 alex 09:00:00
122 jamy 09:00:20
123 Neo 09:00:25
Нео Листья:
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 alex 09:00:00
122 jamy 09:00:20
123 Neo 09:00:25 13:00:00
Нео Приходит
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 Alex 09:00:00
122 Jamy 09:00:20
123 Neo 09:00:25 13:00:00
123 Neo 18:00:00
Ночью Джейми уходит:
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 Alex 09:00:00
122 Jamy 09:00:20 22:00:00
123 Neo 09:00:25 13:00:00
123 Neo 18:00:00
Нео Листья:
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 Alex 09:00:00
122 Jamy 09:00:20 22:00:00
123 Neo 09:00:25 13:00:00
123 Neo 18:00:00 23:00:00
Алекс Листья:
[memberCode] | [name] | [ClockIn]| [ClockOut]
121 Alex 09:00:00 00:00:00
122 Jamy 09:00:20 22:00:00
123 Neo 09:00:25 13:00:00
123 Neo 18:00:00 23:00:00
Конечно, мне также нужен столбец с датой, но я его опустил из-за простоты.Это моя идея для посещаемости.Если вы хотите добавить что-то, чтобы сделать это лучше, я был бы признателен.