首页新闻找找看学习计划

求个sql语句

0
[已解决问题] 解决于 2009-11-17 18:26

    ——考勤表——

员工id     员工账号       密码        上班日期          上班时间   下班时间     上班状态  下班状态

1    001     aaa   2009-10-11   08:10  17:00     迟到    正常

2    002     aaa   2009-10-11   08:00  17:00     正常    正常

3    001     aaa   2009-10-11   08:00  16:50     正常      早退

4    004     aaa   2009-11-11   08:00  17:00     正常    正常

5    001     aaa   2009-10-11   08:00  17:00     正常    正常 

小弟想统计账号为001的员工的10月份考勤情况:

即想到的结果如下:

员工账号    迟到次数  早退次数 正常上班次数

001    1     1     1

请各位指点迷津啊!!!谢过了!!!

小弟菜的很。。。。。。

Jaryleely的主页 Jaryleely | 菜鸟二级 | 园豆:367
提问于:2009-11-11 20:48
< >
分享
最佳答案
0



declare @t table(员工id varchar(10),上班状态 varchar(10),  下班状态 varchar(10))
insert @t
select '001','迟到','正常'
union all
select '001','正常','早退'
union all
select '001','正常','正常'  
union all
select '002','正常','正常'  
union all
select '004','正常','正常'  

select 员工id ,
迟到次数=sum(case when 上班状态='迟到' then 1 else 0 end),
早退次数=sum(case when 下班状态='早退'  then 1 else 0 end),
正常上班=sum(case when 上班状态='正常' and 下班状态='正常' then 1 else 0 end)
from @t
where 员工id='001'
group by 员工id

清海扬波 | 小虾三级 |园豆:813 | 2009-11-11 21:58
很强啊,测试环境都写好了,楼主赶快给分人家吧!
Tim Lee | 园豆:350 (菜鸟二级) | 2009-11-12 10:44
select 员工id , sum(case when 上班状态='迟到' then 1 else 0 end) as 迟到次数, ...
DaCHun | 园豆:255 (菜鸟二级) | 2009-11-16 12:29
其他回答(3)
0

具体数据库产品是?MSSQL?还是?是否需要标准SQL?

还有一个,既迟到,又早退,是否重复计算?还是谁优先?呵呵。

rainnoless | 园豆:613 (小虾三级) | 2009-11-11 21:02
0

同一天 001 怎么有三条考勤记录~

Mr雨 | 园豆:1199 (小虾三级) | 2009-11-12 09:25
0

用交叉报表....二楼正解,但是为什么要先插入临时表呢?为了提高性能?

Y'冬眠℡ | 园豆:246 (菜鸟二级) | 2009-11-12 15:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册