设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: zyp
打印 上一主题 下一主题

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

[复制链接]
11#
发表于 2005-11-4 22:20:00 | 只看该作者
在ADP中 true 还是等于-1的吗?如果是,那么SELECT 员工, sum((起始日期<#10/1/2005#)*#10/1/2005#+(起始日期>=#10/1/2005#)*起始日期-(结束日期>#10/31/2005#)*#10/31/2005#-(结束日期<=#10/31/2005#)*结束日期+1)

FROM Sheet1

GROUP BY 员工;
12#
发表于 2005-11-4 22:23:00 | 只看该作者
再加一个 where 结束日期>=#2005-10-1# 更保险
13#
发表于 2005-11-5 02:41:00 | 只看该作者
SUM

返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略



日期型的。。。估计不行,最令我不解的是SQL2000提示“<”附近有错误。。。按说SQL2000不可能不支持比较运算吧?
14#
发表于 2005-11-5 04:52:00 | 只看该作者
呵呵,在MDB中是可以的
15#
发表于 2005-11-5 17:01:00 | 只看该作者
这个难在怎样将跨月的日期转变成本月的第一日或者最后一日,,想不出来哇
16#
 楼主| 发表于 2005-11-6 01:25:00 | 只看该作者
多谢LucasLynn 版主的指点,问题已解决

下面是在ADP中写的存储过程,其中@firstDay为要查询月的第一天,@LastDay为要查询的最后一天

Alter Procedure "JiaTsM"

(@FirstDay datetime,@LastDay DateTime)



As



     declare @Y int,@M int

     set @Y=year(@FirstDay)

     set @M=month(@FirstDay)



      SELECT 员工,

                 Convert(int,Case When 终止日期>@LastDay Then @LastDay Else 终止日期

                 End-Case When 起始日期<@FirstDay Then @FirstDay Else 起始日期 End)

                As 天数
  

      From 请假表

      WHERE

               ((year(起始日期)=@Y and month(起始日期)=@M) or

               (year(终止日期)=@Y and month(终止日期)=@M) or

                (起始日期<@FirstDay and 终止日期>@LastDay))

return

[此贴子已经被作者于2005-11-5 17:26:58编辑过]

17#
 楼主| 发表于 2005-11-6 01:30:00 | 只看该作者
以下是引用海狸先生在2005-11-4 14:20:00的发言:

在ADP中 true 还是等于-1的吗?如果是,那么

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

FROM Sheet1

GROUP BY 员工;





谢谢海狸版主,在ADP中True为1,False为0

再次谢谢两位版主的提点,及各位网友的热情帮助[em24][em24][em24][em24][em25][em25][em25][em25][em26][em26][em26][em26][em27][em27][em27][em27]

[此贴子已经被作者于2005-11-5 17:31:53编辑过]

18#
发表于 2005-11-8 15:35:00 | 只看该作者
那这样应该可以吧SELECT 员工, sum((结束日期>#10/31/2005#)*#10/31/2005#+(结束日期<=#10/31/2005#)*结束日期-(起始日期<#10/1/2005#)*#10/1/2005#-(起始日期>=#10/1/2005#)*起始日期+1)

FROM Sheet1

GROUP BY 员工;
19#
发表于 2005-11-8 18:17:00 | 只看该作者
以下是引用海狸先生在2005-11-8 7:35:00的发言:



那这样应该可以吧

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

FROM Sheet1

GROUP BY 员工;

SELECT 子句错误:'>' 附近的表达式。

SELECT 子句错误:'FROM' 附近的表达式。

丢失 FROM 子句。

无法对查询文本做语法分析。

不行呢SQL2000中通不过
20#
发表于 2005-11-8 19:19:00 | 只看该作者
啊。sql2000不支持比较?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-11 04:09 , Processed in 0.107055 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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