高难度报表,我想了很多天,没有搞定!(100分)

E

ew9980

Unregistered / Unconfirmed
GUEST, unregistred user!
用FastReport 或 ReportMachine 实现如下报表:
Goods表
字段
ID Name Color
1 aa red
2 bb blue
GoodsSize 表
字段
GoodsID Size Qty
1 X 10
1 L 20
1 S 30
2 L 30

------------------------------------------------
报表:
GoodsID Name X L S Qty
1 aa 10 20 30 60
2 bb 0 30 0 30
.................................
 
如有例子,我加1000分
 
我想如果想用报表设计器帮你解决估计不太可能但你可以生成一个如报表格式式的临时数据集
先对goodsize表进行计算看size字段有多少不重复的记录这些记录就是临时表要有的字段
select distinct size from goodsize(可得要有的字段名称)
然后根据goods表将ID和name插入到临时表里其实字段值置0,即先初始化那个临时表
然后按goodsid对两表进行连接
select a.id,a.name from goods as a jion goodsize as b on a.id=b.goodsid
上面的语句产生一个记录集然后对这个记录集进行(比如说这个记录集叫temptb)
然后对上面的temptb进行一个遍历例如如果id=1则根据它的size字段(比如说是x)是什么值对临时表的
id=1的那条记录的字段名是x的那个字段赋qty字段的值,然后对临时表的最后一个求和字段进行累加
最后报表显示的是临时的表的内容
不知 这样和不和符你的要求
 
就是交叉表吧!
自己查查看看吧
 
很Easy的,用个过程组织你的数据成一个表,然后就不用我说了
 
会就不会问您们大佬了,说明白点行不!!
 
用fastreport或者rm的交叉表可以实现,我前几天问题就是这样实现的,
只是我手中的控件在执行reportshow时出错,也就是没有crossview类
 
郭玉梁的意思是你先在一个存储过程里把这些数据组织出来,然后存到一个表里,
你不就可以直接使用FastReport报表控间连接这个表了吗?剩下的只是界面表示了!
这是一种将问题转移的方法,不要非要通过一种方法了解决!你不会要求人把代码
也给你列出来吧!
 
用一个Clientdata做一个内存表,你就可以像操作普通表那样.即使再复杂的查询都可以搞定.
 
我有类似的经验,具体做法是:
1.根据报表需要,建立一个临时表
2.按照条件把数据写入临时表
3.数据输出到报表
 
给分啊, :D
你说的用sql语句实现最好,下面是在sql2000里的语句
select goods.id,goods.name,A.X,A.L,A.S,A.X+A.L+A.S as Qry from goods inner join
(select GoodsSize.GoodsID,
SUM(CASE GoodsSize.Size WHEN 'X' then
Qty else
0 END) AS X,
SUM(CASE GoodsSize.Size WHEN 'L' then
Qty else
0 END) AS L,
SUM(CASE GoodsSize.Size WHEN 'S' then
Qty else
0 END) AS S
from GoodsSize group by goodsid) A on goods.id=A.GoodsID
调试已经通过了,给分啊 :D
 
我试试OK!!!
 
你在做一个关于服装的软件吧!
用SQL语句有问题,主要是因为你的报表的列是不固定的,而是根据数据库中的记录决定的,
这是典型的交叉表,只要使用FastReport的交叉表,一定能搞定。
 
to gxx:
所言极是!!!!!!!!!!!

正是如此,头痛啊,交不了差!!!有没好办法!!
 
我正在试,稍等......................
 
Transform sum(qty) as count
select goodsid
from goodsSize group by goodsid
pivot size
 
对于列不固定的问题,你可以先得出Goodssize表中有多少个不同的值
(select distinct size from Goodssize),然后定义一个指针指向这个结果集
一条一条的把它添加到临时表作列,alter table #table add column
这样可解决你的问题,但当你的size列中有太多的值,这种办法不是很好
 
不是很难,把你的数据在SQL语句中分组,再加入报表中
我有例子
 
用CEll吧!
 

Similar threads

I
回复
0
查看
874
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
824
import
I
I
回复
0
查看
586
import
I
顶部