[英]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.