水晶报表打印多个表的问题(3个表以上)

bowlingljf 2009-04-24 07:17:36
一、有以下3个表:
表A:基本表 学生的基本数据,一个学生一行数据
表B:成绩表 学生每一科目的成绩,一个学生有多行数据
表C:出勤表 出勤记录,一个学生有多行数据
请见图:


二、在水晶报表中设置XSD文件,并设置了表之间的主键和外键关系
基本表-->成绩表 :按学号字段为主外键关系
基本表-->出勤表 :按学号字段为主外键关系
请见图:




三、在水昌报表中把基本表的内容加进去,同时加入一个成绩表的交叉表,显示正常
请看图:


四、以上正常,但是再加入出勤表的交叉表之后,数据就变了,显示的数据是 成绩表的行数 * 出勤表的行数
请看图:请对比上面第一张图的数据来看


问题:为什么会出现这种问题,以上是基本表和成绩表,基本表和出勤表之间建立了关系,难道成绩表和出勤表之间也需要建立关系吗?





...全文
533 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bowlingljf 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yanm7788 的回复:]
个人建议别在水晶里头这样连表,建一个view要好得多,测试起来也方面容易.
[/Quote]

建一个View应该是一样的效果,也会产生多条重复数据
bowlingljf 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 babyt 的回复:]
其实有个很简单的判定方法,就是把你的数据拖到详细资料节上去,你会发现出现了1*2*2=4条数据。
因为成绩表和出勤表无对应关系(这个时候学号字段就不算了)
从业务逻辑上说,数据已经不对了,所以是不能把这三个表捏在一起的
[/Quote]

同意,现在还是用了子报表来解决。
yanm7788 2009-04-26
  • 打赏
  • 举报
回复
个人建议别在水晶里头这样连表,建一个view要好得多,测试起来也方面容易.
阿泰 2009-04-25
  • 打赏
  • 举报
回复
其实有个很简单的判定方法,就是把你的数据拖到详细资料节上去,你会发现出现了1*2*2=4条数据。
因为成绩表和出勤表无对应关系(这个时候学号字段就不算了)
从业务逻辑上说,数据已经不对了,所以是不能把这三个表捏在一起的

bowlingljf 2009-04-24
  • 打赏
  • 举报
回复
以上问题用子报表可以解决,把基本表放在主报表里,然后挂2个子报表,但感觉这样不是很方便,因为以上示例数据只用到了3个表,实际应用中有3个以上的表。

之前发过一个类似问题的贴,很多朋友说是表之间关系设置的问题,可是我检查过了表的链接,并且反复设置了很多种方式,结果都是一样。

另外看了阿泰的录像,里面虽然也是多表数据,但他的示范数据中每个表都是惟一的数据,没有重复的,所以情况不一样。

关键问题是成绩表和出勤表中分别有多行相同学号的数据。

bowlingljf 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zzxap 的回复:]
你先把三张表left join成一张表,然后在主句库里面新建一张空表

或者新建一个dataset 里面新建一个这样的表 ,是left join 后的这张表的所有字段。

然后你吧这张新表的字段拖到水晶报表上。

然后在后台的left join 语句中将数据 selelct as 表中的字段,就可以了

你可以分组显示这张表,详细资料区-右键插入分组。
[/Quote]

用left join后,不用在水晶报表端,在SQL查询分析器就select 数据就已经不对了。

能否解释一下你说的分组?
luckyboy101 2009-04-24
  • 打赏
  • 举报
回复
mark
bowlingljf 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zzxap 的回复:]
你先把三张表left join成一张表,然后在主句库里面新建一张空表

或者新建一个dataset 里面新建一个这样的表 ,是left join 后的这张表的所有字段。

然后你吧这张新表的字段拖到水晶报表上。

然后在后台的left join 语句中将数据 selelct as 表中的字段,就可以了

你可以分组显示这张表,详细资料区-右键插入分组。
[/Quote]

以前用left join试过,之前就是用left join的视图传给水晶报表,问题和上面的一样。

我不太理解分组的概念,我这张表就是显示一个学生的信息,虽然基本表里会有很多学生的信息,但我在传给水晶报表数据源的时候会用where 学号='001'选择数据。
bowlingljf 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhaozhijun0207 的回复:]

这个有问题,把"成绩表"-"基本表"的箭头反过来

双击线(2条线都),选择"左外部连接"
[/Quote]

试过你的方法,结果还是一样。
zhaozhijun0207 2009-04-24
  • 打赏
  • 举报
回复

这个有问题,把"成绩表"-"基本表"的箭头反过来

双击线(2条线都),选择"左外部连接"
zzxap 2009-04-24
  • 打赏
  • 举报
回复
你先把三张表left join成一张表,然后在主句库里面新建一张空表

或者新建一个dataset 里面新建一个这样的表 ,是left join 后的这张表的所有字段。

然后你吧这张新表的字段拖到水晶报表上。

然后在后台的left join 语句中将数据 selelct as 表中的字段,就可以了

你可以分组显示这张表,详细资料区-右键插入分组。


4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧