设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 13810|回复: 11
打印 上一主题 下一主题

[Access本身] 通过起止时间,如何计算得到分钟或小时表示的合计工时?

[复制链接]
跳转到指定楼层
1#
发表于 2011-7-8 23:21:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
见附件,通过查询能够正确计算,通过自编函数能单计,但不能总计,不如错在哪?有否更简单的方法?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
12#
发表于 2021-3-27 20:23:19 | 只看该作者
54752727
回复

使用道具 举报

11#
发表于 2011-7-11 15:00:08 | 只看该作者
roych 发表于 2011-7-10 20:34
我的意思是,如果格式适当的话,应该是不用IIF嵌套的。
但如果只是时间类型的话,那么系统无法判断是否转 ...

也可不用iif嵌套:
SELECT tblGcGZDmx.工作单号, Sum(DateDiff("n",[开始时间],[结束时间])-([开始时间]>[结束时间])*24*60) AS 工时
FROM tblGcGZDmx
GROUP BY tblGcGZDmx.工作单号;
10#
 楼主| 发表于 2011-7-10 22:49:22 | 只看该作者
谢谢两位版主的热心解答。
9#
发表于 2011-7-10 20:34:05 | 只看该作者
todaynew 发表于 2011-7-10 19:03
无需(YYYY-MM-DD HH:MM:SS)格式,因为造成负数的原因就是个转钟的问题。所以遇见负数加24×60就完事了。

我的意思是,如果格式适当的话,应该是不用IIF嵌套的。
但如果只是时间类型的话,那么系统无法判断是否转钟,IIF语句就不能省却了。
8#
发表于 2011-7-10 19:03:25 | 只看该作者
roych 发表于 2011-7-10 18:06
由于存在两种情况。不可能很简化的,除非是长日期(YYYY-MM-DD HH:MM:SS)类型,才可以直接套用DateDiff计算 ...

无需(YYYY-MM-DD HH:MM:SS)格式,因为造成负数的原因就是个转钟的问题。所以遇见负数加24×60就完事了。
7#
发表于 2011-7-10 18:59:58 | 只看该作者
zww3008 发表于 2011-7-10 17:16
我需要的是分组总计,不是单计。这样还是不行。

我的方法:

SELECT tblGcGZDmx.工作单号, Sum(IIf(DateDiff("n",[开始时间],[结束时间])<0,DateDiff("n",[开始时间],[结束时间])+24*60,DateDiff("n",[开始时间],[结束时间]))) AS 工时
FROM tblGcGZDmx
GROUP BY tblGcGZDmx.工作单号;
6#
发表于 2011-7-10 18:06:25 | 只看该作者
本帖最后由 roych 于 2011-7-10 18:09 编辑

由于存在两种情况。不可能很简化的,除非是长日期(YYYY-MM-DD HH:MM:SS)类型,才可以直接套用DateDiff计算。
详细看看附件吧,之前的SQL语句中忘了加上Sum聚合函数了:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
 楼主| 发表于 2011-7-10 17:16:11 | 只看该作者
roych 发表于 2011-7-10 06:56
那就这样改下吧:
SELECT tblGcGZDmx.工作单号, IIf(DateDiff("n",[tblGcGZDmx]![开始时间],[tblGcGZDmx]! ...

我需要的是分组总计,不是单计。这样还是不行。

我的方法:
SELECT tblGcGZDmx.工作单号, Sum(Round(IIf(nz([开始时间])>nz([结束时间]),(1+nz([结束时间])-nz([开始时间]))*1440,(nz([结束时间])-nz([开始时间]))*1440),0)) AS 工时
FROM tblGcGZDmx
GROUP BY tblGcGZDmx.工作单号;
已经可以了。但想利用函数简化,不知为什么用在分组总计中不行,提示“表达式中数据类型不匹配”。
4#
发表于 2011-7-10 06:56:25 | 只看该作者
那就这样改下吧:
SELECT tblGcGZDmx.工作单号, IIf(DateDiff("n",[tblGcGZDmx]![开始时间],[tblGcGZDmx]![结束时间])<0,DateDiff("n",[tblGcGZDmx]![开始时间],[tblGcGZDmx]![结束时间])+1440,DateDiff("n",[tblGcGZDmx]![开始时间],[tblGcGZDmx]![结束时间])) AS 工时
FROM tblGcGZDmx
GROUP BY tblGcGZDmx.工作单号;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-26 00:52 , Processed in 0.116121 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表