CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

FastReport分组统计的问题,一句话说不清,请高手进来看看

楼主royalkern(不为失败找理由,只为成功找方法)2006-03-03 20:18:36 在 Delphi / 数据库相关 提问

报表有五个字段,分别为:员工编号,员工姓名,考勤异常类型,天值(即异常的时间算多少天数)  
  考勤异常类型有:迟到,早退等等  
   
  报表以“员工编号”为分组头条件  
   
  在分组脚统计时我想统计成,某员工迟到多少天,早退多少天。。。这种形式  
  就是想把某员工的各种异常类型总天值统计出来。  
   
  我在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"]为天值,单位:天  
   
   
  想不通如何弄了,请高手指教,谢谢了。 问题点数:80、回复次数:15Top

1 楼royalkern(不为失败找理由,只为成功找方法)回复于 2006-03-04 08:09:14 得分 0

不要沉了啊,顶起来!  
   
  高手都到哪里去,帮帮忙,谢谢!Top

2 楼royalkern(不为失败找理由,只为成功找方法)回复于 2006-03-04 13:33:08 得分 0

怎么没人知道呢?Top

3 楼jmhlp(网事如风)回复于 2006-03-05 19:36:23 得分 0

用一个交叉报表就解决了所有问题Top

4 楼jmhlp(网事如风)回复于 2006-03-05 19:40:57 得分 0

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

5 楼lovendII(流氓都做了城管)回复于 2006-03-06 08:36:51 得分 0

用sql语句来实现吧Top

6 楼royalkern(不为失败找理由,只为成功找方法)回复于 2006-03-06 11:21:03 得分 0

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

7 楼royalkern(不为失败找理由,只为成功找方法)回复于 2006-03-06 11:25:06 得分 0

可能我的表达还没清楚吧,大家有点误会我的意思了  
  我的报表结果是如下这样的  
   
  员工编号  员工姓名  异常类型  天值  
  001     张三    迟到    0.5  
  001     张三    迟到    0.5   
  张三合计 迟到:1.0天 早退:0天  旷工:0天   --这部分是分组脚统计   
  002     李四    旷工    1.0  
  002     李四    旷工    1.0  
  李四合计 迟到:0天  早退:0天  旷工:2.0天   
  003     王五    早退    0.5  
  王五合计 迟到:0天  早退:0.5天  旷工:0天   
   
   
   
  Top

8 楼royalkern(不为失败找理由,只为成功找方法)回复于 2006-03-06 11:26:58 得分 0

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

9 楼jmhlp(网事如风)回复于 2006-03-06 16:11:34 得分 0

用一个交叉报表可以解决,  
  否则就要用这样的查询语句  
  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."旷工")]Top

10 楼jmhlp(网事如风)回复于 2006-03-06 16:28:51 得分 40

不好意思,写错一点:  
  用面的试试  
  '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."旷工")]Top

11 楼NS_RMP(革命尚未完成)回复于 2006-03-07 17:54:47 得分 0

子报啊Top

12 楼NS_RMP(革命尚未完成)回复于 2006-03-07 17:55:15 得分 0

子报表fastreport里面Top

13 楼bybylyly(风之子)回复于 2006-03-08 07:48:15 得分 40

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

14 楼royalkern(不为失败找理由,只为成功找方法)回复于 2006-03-08 11:35:41 得分 0

问题解决了,是用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]   天Top

15 楼NewQger(Q哥)回复于 2006-03-28 18:24:19 得分 0

markTop

相关问题

  • 一句话说不清楚,进来看吧
  • 关于Indy的 TIDHttp, 进来看看,用标题一句话说不清楚
  • 写这样的SQL语句对我来说有难度,一句话也说不清楚,各位哥哥姐姐们进来看看吧
  • 就一句话
  • FastReport的统计问题!谢谢关注!
  • 一句话指点!
  • 一句话问题!
  • 一句话不懂~~~
  • 一句话感悟!
  • 帮帮我,msdn说不清不楚的

关键词

  • 员工
  • 报表
  • 语句
  • adsabnormal
  • ondutysum
  • 值
  • lateday
  • 早退
  • 统计
  • 迟到

得分解答快速导航

  • 帖主:royalkern
  • jmhlp
  • bybylyly

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo