为什么Crystal Reports会制作详细信息部分的笛卡尔积?

时间:2012-09-24 05:01:39

标签: crystal-reports

假设我有下面的3个表,并在UserID字段上创建表1到表2以及表1到表3的连接。如果我创建两个详细信息部分,一个包含表2数据,第二个包含表3数据,则crystal将产生8行结果,就好像它正在执行表2和表2中的笛卡尔积。我预计它只会输出4行。解决方案是使用子报告,但我想知道它为什么这样做?

表1

UserID Name
1      'John Smith'

表2

GameID UserID Score
1      1      50
2      1      60

表3

CarID  UserID  Make
1      1       Acura
2      1       Tata

3 个答案:

答案 0 :(得分:0)

您可以为每个详细信息部分使用一个子报告,并在每个子报告中使用以下两个查询

选择USERID,姓名,分数,制作 FROM [表1]内部联接[表2] [表1] .userID = [表2] .USERID

选择USERID,Name,Make FROM [表1]上的内连接[表3] .userID = [表3] .USERID

答案 1 :(得分:0)

根据您加入表格的方式得到四行([表2]中的2行X [表3]中的2行)

您还有四行,因为您有两个“详细信息”部分。

游戏和汽车没有逻辑关系,因此您应该将其中一个表移到相关的子报告中。

答案 2 :(得分:0)

Crystal这样做是因为其他2个表(游戏,汽车)不相关。 userid字段向每个表发送请求以获取信息。两个表然后将信息发送回它,晶体显示检索到的信息。如果您为报告添加标准,例如max(carid)和max(gameid),您可以获得两者的单一答案,您也可以尝试一下max(carid)来查看您是否仍然可以获得所有的gameid(这取决于如何创建联接