2012-09-24 25 views
0

假設我有下面3個表,並在UserID字段上創建表1到表2和表1到表3的連接。如果我創建兩個細節部分,一個是表格2數據,另一個是表格3數據,則晶體會生成8行結果,就好像它正在執行表2 & 3的笛卡爾乘積。我期望它只輸出4行。解決方案是使用子報告,但我想知道爲什麼要這樣做?Crystal Reports爲什麼要執行細節部分的笛卡爾積?

表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

水晶這樣做是因爲其他兩個表(遊戲,汽車)不相關。用戶ID字段向每個表發送請求以獲取信息。這兩個表然後將信息發回給它,水晶顯示檢索到的信息。如果你爲max(carid)和max(gameid)這樣的報告添加標準,你會得到一個答案,你也可以嘗試一個最大值(carid),看看你是否仍然得到所有的遊戲ID(這取決於在你的連接如何創建)

0

可以在每個子的使用以下兩個查詢每細節部分和使用一個子報告報告

選擇USERID,名稱,分數,讓 FROM [表1]內部聯接[表2] [表1] .userID = [表2] .USERID

選擇USERID,名稱,讓 FROM內加入[表3]。使用者ID = [表3] .USERID

+0

嗨,是的,我知道修復是使用子報告,我只是想知道爲什麼他們在這種情況下是必要的。 – kristianp

0

根據您如何加入表格(來自[表格3] [表格2]×2行的2行)獲得四行

由於您有兩個「詳細信息」部分,您還會再獲得四行。

遊戲和汽車沒有邏輯關係,所以您應該將其中一個表移動到相關的子報告中。