一个FastReport问题,关于交叉表的(100分)

  • 主题发起人 主题发起人 埋名
  • 开始时间 开始时间

埋名

Unregistered / Unconfirmed
GUEST, unregistred user!
表A ProjNo ProjName
01 项目01
02 项目02
表B ProjNo Invest Years
01 10 1991
01 20 1992
02 30 1990
打印如下: ProjNo ProjName 1990 1991 1992
01 项目01 10 20
02 项目02 30
这样的报表打印怎么实现
 
select 表A.projno,表A.projname,
sum(case 表B.years when '1990' then
invest end) as '1990',
sum(case 表B.years when '1991' then
invest end) as '1991',
sum(case 表B.years when '1992' then
invest end) as '1992'
from 表A,表B
where 表A.projno=表B.projno
group by 表A.projno,表A.projname
 
我用ACCESS数据库,这个SQL语句同不过。
 
ACCESS没用过,你换成SQL server2000吧!
很好用的
 
项目都快完了,现在想换是来不急了,有没有其他办法,其实我用fastreport的交叉表实现了一部分功能,但打印显示为:
ProjNo ProjName 1990 1991 1992
01 项目01 10 20
02 项目02 30
其中项目01的数值与年份不对应,应该怎么改啊
 
问题勉强解决了,现在又有新问题,交叉报表要打印的列数比较多,可能有10几列,打印时自动会换到下一页,可是交叉报表后面的列仍然会在第一页显示,怎么将其打印在下一页。
ProjNo ProjName 1990 1991 1992 ... 2000 合计
01 项目01 10 20 10 100
02 项目02 30 10 100
错误的打印结果:
ProjNo ProjName 1990 1991 1992 ... 合计
01 项目01 10 20 100
02 项目02 30 100
2000
10
10
希望的打印结果:
ProjNo ProjName 1990 1991 1992 ...
01 项目01 10 20
02 项目02 30
2000 合计
10 100
100
 
如果不是老板很急的话,我真的不是很急,大虾们,帮兄弟一把
 
不理解你是怎么做的~
这种报表应该不是很难的啊~
 
to linglingx
请问你有什么好办法,我可能思路走到死胡同了
 
先说说你是如何实现的呢???
用什么办法把数据调出来的???
使用AdoQuery??
 
你可以这样试试啊~
一、采用Adoquery取得数据。
with adodo
begin
close;
SQL.clear;
SQL.add('select a.*,b.* from a,b');
open;
end;
二、可以尝试采用Fastreport中的CrossView(应该是这样的~)
把NO和名称放在左列,年份放在右列,数据放在中间(就跟Excel的透视一样的)
然后看一下,是否复合你的要求~
 
to linglingx
我可能说不太清楚,要不我把测试代码发给你,你能帮我调一下吗
 
也可以啊~
发到linglingx1@sina.com
不要全部代码,只要打印的啊~~~
今天稍微空一点,帮你看一下啦~
 
to linglingx
代码已发过去了,请接收。
 
简单的看了~
邮件已经回复,请查收~
 
to linglingx
邮件已收到,测试中,谢了先。
 
to linglingx
非常感谢你抽空帮我分析代码,可惜你发给我的代码还不是我所需要的,我的问题可能描述不是很清楚,我发给你的代码中年份与下面数据不符,但这不是我想解决的问题(这个问题我已经解决了,只是测试代码中还存在这个问题),我现在的问题是如何将报表中的一列显示在下一页中,因为年份过多时多余的年份将自动到下一页显示,而在年份后面的列却仍然显示在上一页。
我想你可能比较忙,不管怎么样都要谢谢你。
 
问题解决了,谢谢
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部