一个考勤记录表,取所有员工本月的迟到数,早退数
id username stt
ett
ctime
主键 用户名 是否迟到 是否早退 哪一天的数据
自增长 不会重复 1是 2否 1是 2 否
int nvarchar int int datetime
假若表名为aaa
SELECT t.id,t.username, COUNT (CASE WHEN t.stt = 1 THEN 1
ELSE NULL
END) as 迟到次数数,
COUNT (CASE WHEN t.ett = 1 THEN 1
ELSE NULL
END) as 早退次数
FROM aaa t GROUP BY t.id,t.user_name;
后面时间小尾巴你自己随便带,大体思路应该是这样,未测,睡觉~~~
求解:取所有员工本月的迟到数和早退数
数据库测试信息如图
你说取所有员工的迟到和早退,是每个员工的迟到和早退?
取每个员工本月的迟到早退
SELECT 员工,COUNT(迟到字段),count(早退字段) FROM 表名 WHERE STT='1' OR ATT='1' group by 员工,你可以试试看是不是你想要的结果
select username, (case when stt=1 then 1 else 0 end) sttcount, (case when ett=1 then 1else 0 end) ettcount from table_ where ctime > '2016-07-01' and ctime < '2016-08-01' group by username
手机码字见谅。
这里ctime没用日期截取主要是考虑查询效率。因为在列上使用日期截取函数无法使用索引。