我有这两张桌子:
表1 :
CustomerID Area Type Revenue
1 Europe Institutional Clients 10
2 Asia Institutional Clients 10
3 USA Institutional Clients 10
表2 :
Report Country Type Rate
DK Institutional Clients 2
SE Institutional Clients 2
FI Institutional Clients 2
我想创建一个连接两个表并创建计算字段(Revenue * Rate)的查询。但是当我使用MS Access查询设计器时,计算字段的总和会返回错误的结果。
查询版本1 : 此查询每个客户返回20个(这是正确的),总共60个,但这些字段未分组为1行。 (如果我删除字段CustomerID和Area I获得1行,但结果显示20?!Se version1B下面)
SELECT t_Customer.CustomerID, t_Customer.Area, t_Customer.Type, [Revenue]*[Rate] AS CalculatedField
FROM t_Customer INNER JOIN t_Rate ON t_Customer.Type = t_Rate.Type
GROUP BY t_Customer.CustomerID, t_Customer.Area, t_Customer.Type, [Revenue]*[Rate];
返回:
CustomerID Area Type CalculatedField
1 Europe Institutional Clients 20
2 Asia Institutional Clients 20
3 USA Institutional Clients 20
查询版本1B :我删除字段CustomerID和Area。
SELECT t_Customer.Type, ([Revenue]*[Rate]) AS CalculatedField
FROM t_Customer INNER JOIN t_Rate ON t_Customer.Type = t_Rate.Type
GROUP BY t_Customer.Type, ([Revenue]*[Rate]);
返回:
Type CalculatedField
Institutional Clients 20
查询版本2 : 这里我添加了计算字段的SUM。 此查询返回180(这是错误的)。
SELECT t_Customer.Type, Sum(([Revenue]*[Rate])) AS CalculatedField
FROM t_Customer INNER JOIN t_Rate ON t_Customer.Type = t_Rate.Type
GROUP BY t_Customer.Type;
返回:
Type CalculatedField
Institutional Clients 180
有没有办法使用MS Access查询设计器显示计算字段的正确总和,所以我只能有1个查询用于此目的?
我知道我可以在查询版本1 之上创建一个新查询,以获得正确的总和。但我想避免为此目的进行2次查询。
答案 0 :(得分:2)
SELECT t_Customer.CustomerID,
t_Customer.Area,
t_Customer.Type,
[Revenue] * [Rate] AS CalculatedField
FROM t_Customer
JOIN (SELECT DISTINCT Type, Rate
FROM t_rate) t_rate ON t_Customer.Type = t_Rate.Type
如果你想要一行,那么:
SELECT t_Customer.Type,
SUM([Revenue] * [Rate]) AS CalculatedField
FROM t_Customer
JOIN (SELECT DISTINCT Type, Rate
FROM t_rate) t_rate ON t_Customer.Type = t_Rate.Type
GROUP BY t_Customer.Type
返回:
Type CalculatedField
Institutional Clients 60
请注意,无法使用Access Query Designer(在设计模式下)进行此更改,您必须切换到SQL View。
另请注意,SELECT DISTINCT部分可以在括号中输入,如
(SELECT DISTINCT Type,Rate FROM t_rate)
但Access会将其转换为
[SELECT DISTINCT Type,Rate FROM t_rate].
再次保存和编辑查询时。 它产生相同的结果。所以它运作得很好。