所以我有三个表(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];
答案 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]