SQL仅返回具有多个出现的ID的总和

时间:2017-07-25 21:04:50

标签: sql ms-access select

所以我有三个表(AcDD,AH,Life),每个客户有多个金额。客户可以拥有任何类型的组合。我为每个表创建了一个查询,以总结每个AcDD,AH和Life的数量。然后我创建了第四个查询,将所有这些组合在一起。问题是我只获得所有3个查询共有的ID ...客户可能只有Life而没有AcDD或AH - 我的第四个查询中缺少此ID。我做错了什么?

按表查询(三个表中的每一个都存在相同的查询):

YAUYOS

第4次查询(全部合并)

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];

2 个答案:

答案 0 :(得分:0)

您需要使用LEFT(或RIGHT)连接。 INNER JOINS要求所有表中都存在匹配的记录。 LEFT联接指定应返回左表中的所有记录。对于右表中不匹配的行,将返回空值。 (正确的连接完全相同,但只是交换表名的相对位置。通常的做法是始终对表进行排序,使得您只使用LEFT连接,但这不是必需的。)

请参阅MS Access特有的LEFT JOIN, RIGHT JOIN Operations

第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];

答案 1 :(得分:0)

有多种方法可以解决这个问题。要记住的主要是你的连接类型。确保保留 [Customers-Personal]。[Customer ID] 列和该表中的Left Join。

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]