当前位置: 代码迷 >> Sql Server >> 怎么统计每月请假天数?想了几天没弄出来
  详细解决方案

怎么统计每月请假天数?想了几天没弄出来

热度:18   发布时间:2016-04-24 09:03:05.0
如何统计每月请假天数?想了几天没弄出来
我有一个请假表,格式如下
请假时间            请假时间到              请假人员
2015-5-20         2015-5-25               a
2015-5-30         2015-6-1                 a
2015-5-24         2015-5-25               b
2015-5-25         2015-6-5                 b
2015-4-25         2015-6-5                 c
我想要的结果是
a在5月请假天数为:6+2=8天
a在6月请假天数为:1天
b在5月请假天数为:2+7天
b在6月请假天数为:6天
c在4月请假天数为:6天
c在5月请假天数为:31天
c在6月请假天数为:6天

难点就是如果请假时间段不跨月很好统计,但一旦跨月了,请假记录就要撤分开来分别统计单个月的请假天数,
领导要求跨月的就要撤分来统计每月员工的请假天数,
请问怎么来写sql来得到这样的报表?


------解决思路----------------------
如果上面的重叠情况,你试下
SELECT 请假人员,MONTH(请假时间)[月份]
,SUM(DATEDIFF(DAY,请假时间,请假时间到)+1)[总天数]
FROM(
SELECT 请假人员
,CASE WHEN T2.number=0 THEN T1.请假时间 ELSE DATEADD(MONTH,T2.number,T1.StartDay) END[请假时间]
,CASE WHEN DATEADD(DAY,-1,DATEADD(MONTH,T2.number+1,T1.StartDay))<T1.请假时间到
THEN DATEADD(DAY,-1,DATEADD(MONTH,T2.number+1,T1.StartDay)) ELSE T1.请假时间到 END[请假时间到]
FROM(SELECT 请假时间,请假时间到,请假人员
,DATEADD(DAY,1-DAY(请假时间),请假时间)StartDay
FROM 请假表)T1
JOIN master..spt_values T2 ON T2.number<=DATEDIFF(MONTH,T1.请假时间,T1.请假时间到)
WHERE T2.type='P'
)T
GROUP BY 请假人员,MONTH(请假时间)
ORDER BY 1,2
还有你的一些天数算错了
  相关解决方案