首先,这个考勤系统已经做好的了!无法修改!
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应该怎么列出来??谢谢!

解决方案 »

  1.   

    首先建议楼主再加个时间星期字段 这样性能好点
    select time, name from table group by time 
      

  2.   

    这个就是“交叉表”的功能啊
    给你一个例子
    http://publish.it168.com/2005/1105/20051105001501.shtml?cChanNel=11&cpositioncode=296&hezuo=29
      

  3.   

    搜下,行转列大把大把的
    使用case语句
      

  4.   

    不难呀。。就是在SQL语句中处理一下即可,读取某个用户某天的打卡时间写在一个函数里,把用户的ID和时间做入参数传入
      

  5.   


        --一周内的统计
        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
      

  6.   

    sql2005已直接支持“交叉表”,使用pivot
    看这个http://tech.it168.com/db/s/2006-07-31/200607311324786.shtml