初学,这个sql语句实在写不出来了求指点 sql server 2005

初学,这个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; 

后面时间小尾巴你自己随便带,大体思路应该是这样,未测,睡觉~~~

  1. 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没用日期截取主要是考虑查询效率。因为在列上使用日期截取函数无法使用索引。