假设我有下面的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
答案 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(这取决于如何创建联接