2017-07-25 60 views
0

所以我有三個表(AcDD,AH,Life),每個客戶有多個金額。顧客可以有任何類型的組合。我爲每個表格創建了一個查詢來計算每個AcDD,AH和Life的數量。然後我創建了第四個查詢,將它們全部結合在一起。問題是,我只獲得所有3個查詢共同的ID ......一個客戶可能只有生活,沒有AcDD或AH - 這個ID從我的第四個查詢中缺失。我究竟做錯了什麼?SQL只返回多次出現ID的總和

:查詢表(存在於每個三個表的相同的查詢):

SELECT DISTINCTROW [Customers-Personal].[Customer ID], 
     Sum([NewB-Coverage: AH].[AH Monthly Benefit]) AS [Sum Of AH Monthly Benefit] 
FROM [Customers-Personal] INNER JOIN [NewB-Coverage: AH] 
ON [Customers-Personal].[Customer ID] = [NewB-Coverage: AH].[Customer ID] 
GROUP BY [Customers-Personal].[Customer ID]; 

第四查詢(合併所有)

​​

回答

0

您需要使用左(或右)與。 INNER JOINS要求所有表中都存在匹配的記錄。一個左連接指定所有記錄應該從左表中返回。對於在右表中不匹配的行,返回空值。 (右連接完全相同,但只是交換表名的相對位置,通常的做法是始終排序表,以便只使用LEFT連接,但這不是要求。)

請參閱LEFT JOIN, RIGHT JOIN Operations這是特定於MS Access。

重做第4個查詢。我懶惰地使用RIGHT加入只是爲了保持表的原始順序:

SELECT [Customers-Personal].[Customer ID], 
     Sum_AcDD.[Sum Of AcDD Amount], 
     Sum_AH.[Sum Of AH Monthly Benefit], 
     Sum_Life.[Sum Of Decr Life Amount], 
     Sum_Life.[Sum Of Level Life Amount] 
FROM Sum_Life RIGHT JOIN 
      (Sum_AH RIGHT JOIN 
       (Sum_AcDD RIGHT JOIN [Customers-Personal] 
         ON Sum_AcDD.[Customer ID] = [Customers-Personal].[Customer ID]) 
       ON Sum_AH.[Customer ID] = [Customers-Personal].[Customer ID]) 
      ON Sum_Life.[Customer ID] = [Customers-Personal].[Customer ID]; 
+0

@C珀金斯,感謝您的幫助,詳細的解釋和鏈接,這完美的工作! – TechEng

0

有多種方法可以解決這個問題。要記住的主要是你的連接類型。確保保留您的[客戶 - 個人] [客戶ID]列,並從該表中左連接。

SELECT 
[Customers-Personal].[Customer ID] 
,Sum_AcDD.[Sum Of AcDD Amount] 
,Sum_AH.[Sum Of AH Monthly Benefit] 
,Sum_Life.[Sum Of Decr Life Amount] 
,Sum_Life.[Sum Of Level Life Amount] 
FROM 
[Customers-Personal] 
LEFT JOIN Sum_AcDD ON [Customers-Personal].[Customer ID] = Sum_Life.[Customer ID] 
LEFT JOIN Sum_AH ON [Customers-Personal].[Customer ID] = Sum_AH.[Customer ID] 
LEFT JOIN Sum_Life ON [Customers-Personal].[Customer ID] = Sum_Life.[Customer ID] 
+0

@安德魯,感謝您的迴應,但這並沒有奏效。我收到一條錯誤消息:查詢表達式[Customers-Personal]中的語法錯誤(缺少運算符)。[Customer ID] = Sum_Life。[Customer ID] LEFT JOIN Sum_AH ON [[Customers-Personal]。[Customer ID] = Sum_AH。 [Customer ID] LEFT JOIN Sum_Life ON [[Customers-Personal]。[Customer ID] = Sum_Life。[Customer ID] .....不知道是否與Left Join有關,Sum AcDD設置爲Sum_Life。 [客戶ID] ...不知道是否與LEFT JOIN Sum_AcDD ON [客戶 - 個人]有關[客戶ID] = Sum_Life。[客戶ID],但@C珀金斯解決方案工作。 – TechEng