如何制作这样的报表?(100分)

  • 主题发起人 主题发起人 raider
  • 开始时间 开始时间
R

raider

Unregistered / Unconfirmed
GUEST, unregistred user!
以前从来不怎么考虑做报表,可是这次不得不作,才知道挺讨厌的
现在我有这么个问题,请大家帮忙
库A 放着地区
ZoneID char(地区编号) , ZoneName char(地区名称)

库B 存放用户购买商品信息, 每个用户有自己的ZoneID
UserID char (用户ID) GdNum char(商品编号) ZoneID(地区ID)

现在要产生这样一个report
zoneID1 ZoneID2 ZoneID3 ...... ZoneIDn
GdNum1 5 2
GdNum2
.
.
GdNumn

统计各个商品最后被那些地方的人买走了,每个地方买了多少件,比如
GdNum1 被来自于zoneID1 地区的人,买走了5件,被zoneID2买走了2件
我真的不知道用qreport怎么做这个报表,我连其Sql都写不出,请大家
详细得给我解释一下,多谢!



 
不用Sql也行,自己编一段程序,统计出所要的值,写到一个临时表里,然后QuickReport就行了。

当然用Sql简单!
 
1.先放一个Query组件, 生成每一件商品在每一个地区被买走了多少件.
SQL语句如下:(Gdcount为被买走件数)
SELECT GdNum,ZoneID,count(*) Gdcount
FORM B
GROUP BY GdNum,ZoneID
产生的记录格式: GdNum,ZoneID,Gdcount
2.建立一个临时表Tmp(字段为GdNum,ZoneID1_count,ZoneID2_count,
ZoneID3_count,...)
3.加入记录到临时表Tmp
将Query产生的记录一条一条的取出来,若临时表Tmp中没有GdNum号的
记录则用TableTmp.AppendRecord(GdNum,0,0,...)加入新记录;
若临时表Tmp 中有GdNum号的记录则修改相应ZoneID_count的值
4.用qreport将Tmp 中的记录打印出来即可。
 
其实很简单,只需要一个TQUERY 对象,关键是要在SQL中采用DECODE函数---查书即知它的作用
 
好象只有象san999那样作了。
 
1:生成临时表#aa

SELECT GdNum,
ZoneID1 = CASE ZoneID WHEN 'ZoneID1' THEN 1 END,
ZoneID2 = CASE ZoneID WHEN 'ZoneID2' THEN 1 END,
ZoneID3 = CASE ZoneID WHEN 'ZoneID3' THEN 1 END,
...
ZoneIDn = CASE ZoneID WHEN 'ZoneIDn' THEN 1 END
INTO #aa
FROM B

2:结果

select sum(ZoneID1) as ZoneID1,
sum(ZoneID2) as ZoneID2,
sum(ZoneID3) as ZoneID3,
sum(ZoneID4) as ZoneID4,
...
from #aa
group by GdNum

如果 ZoneId 数目不定,可以动态生成SQL语句.

3:
根据此查询结果用QReport设计报表.
如果 ZoneId 数目不定,可以动态生成报表.

如果是Oracle,用decode函数代替.
 
还是用f1吧,一条记录一条记录填好表,打印就可以了
 
类似的问题已经提过很多次了,可以参考一下其它已答问题.
这类问题实际上就是一个列向量怎样转置成行向量的问题,
即对每一行数据来一个转置,利用单位矩阵乘以单位矩阵再各列相加即可
将行转置成列, 具体如下:
table1: gd, zone, qty
建一单位矩阵table2: zone, c1 c2 c3....c(m) (m可以很大)
记录条数也为m条,zone1, 1,0,0.....,0
zone2, 0,1,0,....,0
.....
zone(m), 0,0,0,....,1
然后一条sql:
select gd, sum(qty*c1),sum(qty*c2),..., sum(qty*cm)
from table1, table2
where table1.zone=table2.zone
groupb by gd
 
ReportBuilder
中能够做CrossTable的报表
你的问题是最典型也最简单的。
大约几分钟整个报表搞定。
 
不如搞成动态报表,用程序自己生成TDBtext控件放到QuickReport上面,很方便,而且不用建立临时表。
 
listen listen
 
ReportBuilder?
where can download it in CerNet?
 
多人接受答案了。
 
后退
顶部