当前位置: 代码迷 >> ASP.NET >> 请问关于一个考勤系统的统计
  详细解决方案

请问关于一个考勤系统的统计

热度:6980   发布时间:2013-02-25 00:00:00.0
请教关于一个考勤系统的统计
首先,这个考勤系统已经做好的了!无法修改!
table: 
姓名 打卡时间
甲 2008-7-27 8:00
乙 2008-7-27 9:00
甲 2008-7-28 8:15
丙 2008-7-28 8:23
。。。。。
并不是每个人每天都打卡的。。
要的统计效果:可以选择统计的时间段:比如是2008-7-1到2008-7-20
时间 星期 甲 乙 丙 。。。。。。
2008-7-1 星期二 8:01 8:12 9:01 。。。。
2008-7-2 星期三 无打卡 8:15 无打卡。。。。
。。。。。
以此类推,没有打卡的也列出来。。。
这样的sql语句应该怎么写??gridview应该怎么列出来??谢谢!

------解决方案--------------------------------------------------------
要得到你罗列的效果恐怕做不出来.你原来的表结构设计的跟结果不相符,表的数据成为结果里的列名不是很好做.
可以做成这样的
姓名 时间 日期
甲 8:00 2007-7-1
乙 9:00 2007-7-1
丙 未打卡 2007-7-1

甲 未打卡 2007-7-2
乙 8:05 2007-7-2
丙 9:00 2007-7-2

一天一天的来。
------解决方案--------------------------------------------------------
这个就是“交叉表”的功能啊
给你一个例子
http://publish.it168.com/2005/1105/20051105001501.shtml?cChanNel=11&cpositioncode=296&hezuo=29
------解决方案--------------------------------------------------------
搜下,行转列

大把大把的


使用case语句
------解决方案--------------------------------------------------------
不难呀。。就是在SQL语句中处理一下即可,读取某个用户某天的打卡时间写在一个函数里,把用户的ID和时间做入参数传入。。。
------解决方案--------------------------------------------------------
SQL code
    --一周内的统计    declare @startTime dateTime    declare @endTime dateTime    set @startTime=REPLACE(CONVERT(varchar(10),DateAdd(day,-7,DATEADD(Day,2-DATEPART(Weekday,getdate()),getdate())),120),N'-0','-')    set @endTime=REPLACE(CONVERT(varchar(10),DateAdd(day,-1,DATEADD(Day,2-DATEPART(Weekday,getdate()),getdate())),120),N'-0','-')    declare @temp table(XX XX....)    while(@startTime<=@endTime)      begin        insert into @temp           select ...     end
  相关解决方案