使用嵌套的Select和内部联接

时间:2016-11-17 17:03:33

标签: sql sql-server

对于时钟机器。

对于那些忘记在晚上退房的人,这将在午夜自动在桌子上设置时钟记录。我希望它能及时插入与时钟相同的时钟记录

Employee表具有通常的employeeID,employeeName,ClockTypeID ClockTypeID是员工当前状态的快速参考(工作(1)或不工作(2)) 时钟表具有ClockID,ClockTypeID,EmployeeID,ClockDate,ClockTime

我现在(以及我想要它做什么)

INSERT INTO dbo.Clock(EmployeeID, ClockTypeID, ClockDate, ClockTime)
        SELECT EmployeeID, 2, getdate(), [Mininum clock time for current day for current employee]
        FROM Employee
        WHERE employee.ClockTypeID <> 2;

提前致谢!

编辑:更多信息

Clock Table Data Employee Table Data

我想,当查询在晚上运行时;在ClockTypeID为&#39; 1&#39;的每个员工的时钟表中插入一行。 (表明他们仍在计时) 我要插入的行,我希望日期是当前日期,时间是当天的第一个时钟(clocktypeID 1)的时间。 这将以他们的时钟输入时间和日期与他们的时钟输出时间和日期相同结束。这意味着系统会说他们当天工作了0个小时,这应该是他们上级的标志,这样他们就可以手动纠正它。

1 个答案:

答案 0 :(得分:0)

您的说明建议如下:

INSERT INTO dbo.Clock(EmployeeID, ClockTypeID, ClockDate, ClockTime)
    SELECT EmployeeID, 2, CAST(getdate() as DATE), min(clocktime)
    FROM Employee
    GROUP BY EmployeeId, CAST(getdate() as DATE)
    HAVING SUM(CASE WHEN ClockTypeID = 1 THEN 1
                    WHEN ClockTypeId = 2 THEN -1
                    ELSE 0
               END) > 0;