设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 4602|回复: 29
打印 上一主题 下一主题

[其它] [求助]请SQL高手相助:不用自定义函数,如何计算员工每月的请假天数(已解决)

[复制链接]
跳转到指定楼层
1#
发表于 2005-11-2 18:12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个贴本来是发在ADP版块的,因去ADP版块的朋友较少,所以借这个人事旺盛的版块一用,请版主误删,谢谢!

[求助]不用自定义函数,如何计算员工每月的请假天数



在ADP中,有如下的资料表(员工请假记录):  

















Id



员工



起始日期



结束日期





1



张三



2005/10/1



2005/10/3





2



张三



2005/10/12



2005/10/12





3



张三



2005/10/24



2005/10/28





4



李四



2005/9/21



2005/10/15





5



李四



2005/10/25



2005/10/26





6



李四



2005/10/30



2005/11/15





7



王二



2005/9/15



2005/11/14

现在需计算员工在10月份的请假记录,应该为如下结果:<FONT face="Times New Roman">









<TABLE cellSpacing=0 cellPadding=0 border=1>







员工



请假天数

<TR>



张三

<TD vAlign=top width=96>

<FONT colo
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-11-2 20:02:00 | 只看该作者
这个问题和昨天有人问我的一个生日查询的问题有些类似。因为我对ADP不熟悉,无法很快提供给你一个答案,在此提供一个思路:

你可以先对于本月内的跨月假期重新构建起始日期为均在当月内,然后对重新构建后的日期进行统计。

例如查询10月:

记录1:10.2-10.5

重新构建后为10.2-10.5



记录2:9.8-10.6

重新构建后为10.1-10.6

记录3:10.9-11.2

重新构建后为10.9-10.31

记录4:9.25-11.6

重新构建后为:10.1-10.31

[此贴子已经被作者于2005-11-2 12:05:06编辑过]

3#
发表于 2005-11-2 21:38:00 | 只看该作者
这种变通的想法真的很好,牧人,经常有特别有用的思路呵呵。。。。受益良多
4#
 楼主| 发表于 2005-11-3 06:31:00 | 只看该作者
LucasLynn版主果然不同凡响,谢谢!我只考虑该用什么的SQL内建函数和方法,而没有考虑到版主的方法我先测试一下是否可以实现。
5#
发表于 2005-11-3 23:34:00 | 只看该作者
以下是引用zyp在2005-11-2 22:31:00的发言:



LucasLynn版主果然不同凡响,谢谢!

我只考虑该用什么的SQL内建函数和方法,而没有考虑到版主的方法

我先测试一下是否可以实现。

测试后能否分享一下?我琢磨了半天都没办法通过视图实现,以下是我目前能想到,而且在SQL2000中通过了的:

SELECT 姓名, 起始日期, 结束日期

FROM dbo.请假明细表

WHERE (MONTH(GETDATE()) BETWEEN MONTH(起始日期) AND MONTH(结束日期))
6#
 楼主| 发表于 2005-11-4 00:54:00 | 只看该作者
好的,因临时有点任务,可能会推迟几天才会有结果eyewitnes 的方法尚不能实现的我目的。谢谢!
7#
发表于 2005-11-4 04:18:00 | 只看该作者
SELECT 员工, sum(IIf(结束日期>#10/31/2005#,#10/31/2005#,结束日期)-IIf(起始日期<#10/1/2005#,#10/1/2005#,起始日期)+1)

FROM Sheet1

GROUP BY 员工;

8#
发表于 2005-11-4 04:20:00 | 只看该作者
我搞不懂 1)起始日和终止日均为当月的:请假天数 = 终止日 - 起始日 + 1  :如 10月1日到10月5日

(2)起始日为当月之前,终止日为当月:请假天数 = 终止日 - 当月1号 (或day(终止日)) : 如9月1日到10月5日两个 10月1日到10月5日都没上班,为什么一个 算 5天 ,一个却只算4天 ?

9#
 楼主| 发表于 2005-11-4 21:52:00 | 只看该作者
以下是引用海狸先生在2005-11-3 20:20:00的发言:

我搞不懂 

1)起始日和终止日均为当月的:请假天数 = 终止日 - 起始日 + 1  :如 10月1日到10月5日







(2)起始日为当月之前,终止日为当月:请假天数 = 终止日 - 当月1号 (或day(终止日)) : 如9月1日到10月5日

两个 10月1日到10月5日都没上班,为什么一个 算 5天 ,一个却只算4天 ?



谢谢海狸版主

对不起,我是不小心打漏了,应该是两个都是5天:

1)起始日和终止日均为当月的:请假天数 = 终止日 - 起始日 + 1  :如 10月1日到10月5日







(2)起始日为当月之前,终止日为当月:请假天数 = 终止日 - 当月1号 + 1 (或day(终止日)) : 如9月1日到10月5日

[此贴子已经被作者于2005-11-4 13:53:55编辑过]

10#
 楼主| 发表于 2005-11-4 21:59:00 | 只看该作者
以下是引用海狸先生在2005-11-3 20:18:00的发言:

SELECT 员工, sum(IIf(结束日期>#10/31/2005#,#10/31/2005#,结束日期)-IIf(起始日期<#10/1/2005#,#10/1/2005#,起始日期)+1)

FROM Sheet1

GROUP BY 员工;



版主的方法在MDB中绝对没问题,但我是用在ADP中的,没用iif函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-11 03:57 , Processed in 0.096404 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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