我这里有3个表是用来做根据它做报表统计的。
info     (员工表)     字段如下
----     ------
ID        ID
IDname   员工姓名
========================
dutyinfo (考勤情况表) 字段如下
-----       -----
attID        ID
attdate    上班日期
attname    员工ID
attAmlate  上午迟到分钟数
attpmlate  下午迟到分钟数
attAmearly 上午早退分钟数
attpmearly 下午迟到分钟数
attTlate   总迟到分钟数
attTearly  总早退分钟数
===============================
att_unattinfo (非正常出勤情况表) 自动如下
----       ------
TID         ID
TattID     员工ID
Ttype     上班情况(请假,旷工)
Tdate     上班日期
AM        上午(请假,旷工)
PM        下午(请假,旷工)
我想根据这个表做一个这样的报表   统计的是某年某月的数据
=================================================
点击一个button把 某年某月的变量传进来查询。例如是2009-01月
报表就可以得到如下效果 注:如果迟到分钟数大于0则记录迟到
如果早退分钟数大于0则记录早退。如果那天上午或下午有旷工
,请假 则记录旷工,请假。
想要的如下效果
-----------------------------------------------
            2009年01月出勤情况信息报表
         1号      2号      …… 出勤天数
   小张 正常 正常 ……   30  
迟到 早退 ……
   小吴 正常 正常 ……   28
旷工 请假 ……

解决方案 »

  1.   

    建议你到sql版问问,那高手很多
      

  2.   

    我现在就知道要用到case语句和按时间分组,要写出来可能花点时间
      

  3.   

    这是交叉报表,
    你可以先用sql查询出来垂直报表,然后用fr或水晶报表转成交叉报表,sql转交叉报表我没有弄过好像有难度
      

  4.   

    交叉表,用case when就可以了--建立测试环境
    set nocount on
    create table test(model varchar(20),date int ,qty int)
    insert into test select 'a','8','10'
    insert into test select 'a','10','50'
    insert into test select 'b','8','100'
    insert into test select 'b','9','200'
    insert into test select 'b','10','100'
    insert into test select 'c','10','200'
    insert into test select 'd','10','300'
    insert into test select 'e','11','250'
    insert into test select 'e','12','100'
    insert into test select 'f','12','150'
    go
    --测试declare @sql varchar(8000)
    set @sql='select model,'
     select @sql=@sql+'sum(case when date='''+cast(date as varchar(10))+''' then qty else 0 end)['+cast(date as varchar(10))+'],'
    from (select distinct top 100 percent  date
     from test order by date)aset @sql =left(@sql,len(@sql)-1)+' from test group by model'exec(@sql) --删除测试环境
    drop table test
     set nocount off/**//*
    model                8           9           10          11          12
    -------------------- ----------- ----------- ----------- ----------- -----------
    a                    10          0           50          0           0
    b                    100         200         100         0           0
    c                    0           0           200         0           0
    d                    0           0           300         0           0
    e                    0           0           0           250         100
    f                    0           0           0           0           150
    */
      

  5.   

    jinjazz 我有点不太明白。能不能QQ上说呢?
    小女子感激不尽。。
    我的QQ 69009878
      

  6.   

    select A.ID,
    A.IDname,
    case when B.attTlate > 0 then '迟到'  else '正常' end as Late,
    case when B.attearly > 0 then '早退' else '正常' end as Early, 
    C.AM,
    C.PM
    from info A,dutyinfo B,att_unattinfo C
    where A.ID = B.attname and A.ID = C.tattID
    其他条件自已加