我有一个像这样的数据库表:
我希望我能够很好地解释这一点,所以你可以理解.
我想计算每个员工工作了多少小时.
例如,对于“Arjeta Domi”,我们有Cell(2,3) – Cell(3,3)Cell(4,3)Cell(5,3),使每个logout时间与登录时间不同.
我想要的最终表将包含以下列:CardNo,UserName,Date,PauseTime,WorkTime
SELECT disTINCT [Card NO],[User Name],( SELECT MIN(DateTime) AS [Enter Time],MAX(DateTime) AS [Exit Time],MAX(DateTime) - MIN(DateTime) AS [Inside Hours] FROM ExcelData ) FROM ExcelData GROUP BY [Card NO],DateTime
DateTime列的类型为String,而不是DateTime.
我正在使用MS Access数据库.
解决方法
选择带有’m001-1-In’的所有行,将DateTime作为I,并将拟合’m001-1-Exit’行添加到此处,子查询为O,这将如下所示:
SELECT t1.[Card No],t1.[User Name],dateTime as I,(Select TOP 1 dateTime from Tab t2 where t2.[Card No]= t1.[Card No] and t2.[User Name]= t1.[User Name] and t2.Addr='m001-1-Exit' and t2.DateTime>t1.datetime ORDER by DateTime) as O FROM Tab t1 where t1.Addr='m001-1-In'
现在很容易将其封装起来,在下面显示为Prepared并将SUM和Grouping添加到:
SELECT [Prepared].[Card No],[Prepared].[User Name],SUM(DateDiff('n',I,O))/60 AS Hours FROM ( SELECT t1.[Card No],(Select TOP 1 dateTime from Tab t2 where t2.[Card No]= t1.[Card No] and t2.[User Name]= t1.[User Name] and t2.Addr='m001-1-Exit' and t2.DateTime>t1.datetime ORDER by DateTime) as O FROM Tab t1 where t1.Addr='m001-1-In' ) AS [Prepared] GROUP BY [Prepared].[Card No],[Prepared].[User Name]
原文地址:https://www.jb51.cc/mssql/83334.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。