报表有五个字段,分别为:员工编号,员工姓名,考勤异常类型,天值(即异常的时间算多少天数)
考勤异常类型有:迟到,早退等等报表以“员工编号”为分组头条件在分组脚统计时我想统计成,某员工迟到多少天,早退多少天这种形式
就是想把某员工的各种异常类型总天值统计出来。我在FastReport写了如下语句,但是不成功,好LateDay天值只取分组第一行的值
begin
  LateDay := 0;
  for i := 0 to [LINE#]-1 do
  begin
    if [frm_OnDutySum.adsAbnormal."memo"]='迟到' then
      begin
        LateDay:=LateDay+[frm_OnDutySum.adsAbnormal."Valueday"];
      end;
  end;
end注:[frm_OnDutySum.adsAbnormal."memo"]即异常类型字段
    [frm_OnDutySum.adsAbnormal."Valueday"]为天值,单位:天
想不通如何弄了,请高手指教,谢谢了。

解决方案 »

  1.   

    如果有可能,最好用分组查询实现:
       ‘select 员工编号,员工姓名,考勤异常类型,sum(天值) as 天值 from Table group by 员工编号,员工姓名,考勤异常类型’再在报表中用员工编号分组,再在组脚[Sum(frm_OnDutySum.adsAbnormal."天值")]
      

  2.   

    TO jmhlp(网事如风) :
    我的报表要把所有的记录显示出来,
    所以不能用sum(天值)这样的求法
    在组脚[Sum(frm_OnDutySum.adsAbnormal."天值")]这个语句会把所有的天值统计出来
    我要的效果是统计其中几条记录,而不是所有
      

  3.   

    To: lovendII(流氓都做了城管) 用SQL语句是可以实现:迟到几天,早退几天,旷工几天这样的查询结果的
    但是这个结果怎么插入到报表的分组脚中显示
      

  4.   

    用一个交叉报表可以解决,
    否则就要用这样的查询语句
    select 员工编号,员工姓名 sum(天值) as 迟到 ,旷工=(select sum(天值) from table as B where b.考勤异常类型='旷工' and b.员工编号=a.员工编号 group by 员工编号,员工姓名,考勤异常类型),早退=(select sum(天值) from table as c where c.考勤异常类型='早退' and c.员工编号=a.员工编号 group by 员工编号,员工姓名,考勤异常类型) from Table as a where c.考勤异常类型='迟到' group by 员工编号,员工姓名,考勤异常类型 ’再在报表中用员工编号分组,再在组脚[Sum(frm_OnDutySum.adsAbnormal."迟到")+frm_OnDutySum.adsAbnormal."早退")+frm_OnDutySum.adsAbnormal."旷工")]
      

  5.   

    不好意思,写错一点:
    用面的试试
    'select 员工编号,员工姓名 sum(天值) as 迟到 ,旷工=(select sum(天值) from table as B where b.考勤异常类型='旷工' and b.员工编号=a.员工编号 group by 员工编号,员工姓名,考勤异常类型),早退=(select sum(天值) from table as c where c.考勤异常类型='早退' and c.员工编号=a.员工编号 group by 员工编号,员工姓名,考勤异常类型) from Table as a where a.考勤异常类型='迟到' group by 员工编号,员工姓名,考勤异常类型'再在报表中用员工编号分组,再在组脚   迟到合计:[Sum(frm_OnDutySum.adsAbnormal."迟到")]
                     早退合计:[Sum(frm_OnDutySum.adsAbnormal."早退")]
                     旷工合计:[Sum(frm_OnDutySum.adsAbnormal."旷工")]
                       总合计:[Sum(frm_OnDutySum.adsAbnormal."迟到")+frm_OnDutySum.adsAbnormal."早退")+frm_OnDutySum.adsAbnormal."旷工")]
      

  6.   

    在GROUP HEADER里设置变量A,B,C,然后在MASTER DATD里判断,如果是迟到的就A=:A+1,然后在GROUP FOOTER里加[A][B][C]把各变量的值显示出来就行了,根本不用写语句这么麻烦!你去试试!一定好用
      

  7.   

    问题解决了,是用bybylyly(风之子) 的方法,谢谢,是最简单的我具体写下来
    1.在分组头设置如下变量
      LateDays := 0;   --迟到
      EarlyDays := 0;   --早退
      AbsentDays := 0;  --旷工2.在主项数据里面判断
    begin
      if [frm_OnDutySum.adsAbnormal."memo"] = '迟到' then
        LateDays := LateDays + [Abnormal]
      else if [frm_OnDutySum.adsAbnormal."memo"] = '早退' then
        EarlyDays := EarlyDays + [Abnormal]
      else if [frm_OnDutySum.adsAbnormal."memo"] = '旷工' then
        AbsentDays := AbsentDays + [Abnormal];
    end注:[frm_OnDutySum.adsAbnormal."memo"]是异常类型在报表中的显示3.在分组脚中如下显示
    迟到:[LateDays] 天  早退:[EarlyDays] 天  旷工:[AbsentDays] 天