初学,这个sql语句实在写不出来了求指点 sql server 2005
问题描述:
一个考勤记录表,取所有员工本月的迟到数,早退数
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;
后面时间小尾巴你自己随便带,大体思路应该是这样,未测,睡觉~~~
答
- ID 主键 自增长 int 2.username 用户名 不会重复 nvarchar 3.stt 是否迟到 1是2否 int 4.ett 是否早退 1是2否 int 5.ctime 用来记录这是哪一天的数据
求解:取所有员工本月的迟到数和早退数
数据库测试信息如图
答
你说取所有员工的迟到和早退,是每个员工的迟到和早退?
答
取每个员工本月的迟到早退
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没用日期截取主要是考虑查询效率。因为在列上使用日期截取函数无法使用索引。