0

假设我有下面的 3 个表,并在 UserID 字段上创建从表 1 到表 2 以及从表 1 到表 3 的连接。如果我创建两个详细信息部分,一个带有表 2 数据,第二个带有表 3 数据,水晶将产生 8 行结果,就好像它正在做表 2 和 3 的笛卡尔积一样。我希望它只输出 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
4

3 回答 3

0

Crystal 这样做是因为其他 2 张桌子(游戏、汽车)不相关。userid 字段向每个表发送信息请求。然后两个表都将信息发回给它,水晶显示检索到的信息。如果您在报告中添加了诸如 max(carid) 和 max(gameid) 之类的标准,您将得到两者的单一答案,您也可以尝试仅使用 max(carid) 来查看是否仍会获得所有游戏 ID(这取决于关于如何创建连接)

于 2012-09-25T11:26:19.763 回答
0

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

因为您有两个“详细信息”部分,所以您又得到了四行。

Games 和 Cars 没有逻辑关系,因此您应该将这些表之一移动到相关的子报表中。

于 2012-09-24T11:54:24.873 回答
0

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

选择 USERID, Name ,Score, Make FROM [Table 1] inner join [Table 2] on [Table 1].userID= [Table 2].USERID

选择 USERID, Name , Make FROM inner join [Table 3] on [Table 1].userID= [Table 3].USERID

于 2012-09-24T05:20:41.913 回答