请假统计SQL

请假里有:请假类别,开始时间、结束时间
要求统计:在有人请假的日期中按照日期分组,统计出各个请假类别的人数
张三 事假 2014.07.21 2014.07.23
李四 事假 2014.07.22 2014.07.24
王武 病假 2014.07.23 2014.07.24

时间(从请假开始结束时间得出) 事假 病假
2014.07.21 1人 0人
2014.07.22 2人 0人
2014.07.23 2人 1人
2014.07.24 1人 1人

没说什么数据库,sqlserver为例

创建测试表

create table test
(姓名 varchar(10),
事由 varchar(10),
开始时间 datetime,
结束时间 datetime)

insert into test values ('张三','事假','2014-07-21','2014-07-23')
insert into test values ('李四','事假','2014-07-22','2014-07-24')
insert into test values ('王武','病假','2014-07-23','2014-07-24')

执行

select t.时间,
sum(case when t.事由='病假' then 1 else 0 end) ç—…假,
sum(case when t.事由='事假' then 1 else 0 end) äº‹å‡
from
(select a.姓名,a.事由,a.开始时间+b.number æ—¶é—´
from test a,
(select number from master..spt_values 
where type='P' and number<=(select max(DATEDIFF(DAY,开始时间,结束时间)) from test)) b
where DATEDIFF(DAY,a.开始时间,a.结束时间)>=b.number) t
group by t.时间

结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-29
SELECT 请假日期,请假类别,count(*)
FROM 员工表 A,请假表 B
WHERE A.请假日期 >=B.开始日期 AND A.请假日期 <=B.结束日期
GROUP BY A.日期,B.请假类别;
张三请假如果10天,应该对时间有个遍历,查询每一天的请假人数,这个最好java,php完成,对每一天请假的运用上面的查询,依次输出
第2个回答  2014-07-28
select 日期,请假类别,count(*)
from 表
group by 日期,请假类别