繁体   English   中英

Microsoft Access中的出勤查询

[英]Attendances query in Microsoft Access

这是我第一次在此论坛上发布问题。 我一直在努力用Microsoft Access编写查询已有一周了,我希望这里有人可以帮助我。 我正在使用vb6中的指纹构建考勤应用程序。

该表如下所示:

https://i.stack.imgur.com/MZcwI.png

您可以在表格中看到,员工每天可以签入和签出2次以上。 我的问题是:如何确定OriginType列中的哪一行是IN或Out? 员工首次签到时,OriginType应该为“ I”。 当他第二次签入时,OriginType应该为“ O”。 当他第三次签入时,OriginType应该再次为“ I”,依此类推。

第二个问题与上一个不同。

我想编写一个从timeInOut列中选择的查询。 我希望表格看起来像这样:

https://i.stack.imgur.com/GgAhx.png

如您所见,现在有2个新列,并且不再有OriginType列。 我仍然想使用相关子查询和模运算符。 当它是签入时,我希望将其放置在“ CheckIn”列中;如果它是签出,我希望将其放置在“ CheckOut”列中。

您可以从以下查询中获取最后一个OriginType,如果最后一个为“ O”,则插入“ I”;如果查询返回的行不存在,则插入“ I”;如果最后一个为“ I”,则不插入“ O”。

SELECT OriginType from Employee where employeeId = 1 and timeInOut = (select max(timeInOut) from Employee where employeeId = 1)

您可以为此使用相关子查询和模运算符:

SELECT EmployeeID, 
    timeInOut, 
    IIF(
        (SELECT COUNT(*) 
        FROM MyTable s 
        WHERE s.EmployeeID = m.EmployeeID 
        AND s.timeInOut <= m.timeInOut
        AND s.timeInOut >= INT(m.timeInOut)) Mod 2 = 1, "I", "O") As OriginType
FROM MyTable m

该查询以以下方式工作:

子查询获取与当前行同一日期过帐的该员工行数。 然后,我们计算该计数的2的模数,如果计数不能被2整除(例如1、3、5等签入),则返回1,否则将返回0。

如果计数可被2整除,则它必须是签入,如果不是,则是签出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM