FastReport分组统计的问题,一句话说不清,请高手进来看看
报表有五个字段,分别为:员工编号,员工姓名,考勤异常类型,天值(即异常的时间算多少天数)
考勤异常类型有:迟到,早退等等
报表以“员工编号”为分组头条件
在分组脚统计时我想统计成,某员工迟到多少天,早退多少天。。。这种形式
就是想把某员工的各种异常类型总天值统计出来。
我在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




