DepartID EmployeeID EmployeeName CheckDate CheckTime CheckDateTime eatMoney Toll_MachineID
a001002004001 87207024 季支付 2014-04-09 00:00:00.000 17:23:08 2014-04-09 17:23:08.000 5.00 008
a002010002001 88109976 高爱萍 2014-04-09 00:00:00.000 17:54:14 2014-04-09 17:54:14.000 1.70 002
a002010002001 88109976 高爱萍 2014-04-09 00:00:00.000 18:32:14 2014-04-09 18:32:14.000 1.70 002
a003006001001 S-PROCU-03 张维冰 2014-04-09 00:00:00.000 10:54:19 2014-04-09 10:54:19.000 1.70 004
a002015001001 88100340 傅晓芬 2014-04-09 00:00:00.000 10:54:21 2014-04-09 10:54:21.000 5.00 011
a002010002001 88109968 廖宏菊 2014-04-09 00:00:00.000 10:54:27 2014-04-09 10:54:27.000 2.40 002
a001002005001 87207008 李芸 2014-04-09 00:00:00.000 10:54:38 2014-04-09 10:54:38.000 1.50 008
a002010002001 88109979 董华勤 2014-04-09 00:00:00.000 10:54:38 2014-04-09 10:54:38.000 2.70 002
a002018001001 88100174 刘辉 2014-04-09 00:00:00.000 10:54:43 2014-04-09 10:54:43.000 7.50 004
a003006001001 S-PROCU-03 张维冰 2014-04-09 00:00:00.000 18:54:52 2014-04-09 18:54:52.000 3.50 008
a002010002001 88109976 高爱萍 2014-04-10 00:00:00.000 17:04:24 2014-04-10 17:04:14.000 1.70 002
.............
数据表中的记录太多,无法全部列举
要求统计出17:00以后各公司加班人数(当天多次记录只算一人)
a001(SSLS),a002(SHVS),a003(SLC) 分别是三家公司
统计结果如图:
统计日期 SSLS SHVS SLC
2014-04-09 1 1 1
2014-04-10 0 1 0
请教SQL语句如何写?
------解决方案--------------------
少了5点钟的判断:
SELECT CheckDate AS 统计日期,
COUNT(DISTINCT(CASE WHEN DepartID='a001' THEN EmployeeID ELSE NULL END)) AS SSLS,
COUNT(DISTINCT(CASE WHEN DepartID='a002' THEN EmployeeID ELSE NULL END)) AS SHVS,
COUNT(DISTINCT(CASE WHEN DepartID='a003' THEN EmployeeID ELSE NULL END)) AS SLC
FROM TB
WHERE DATENAME(Hh,CheckDateTime)>17
GROUP BY CheckDate