【发布时间】:2011-06-25 00:04:20
【问题描述】:
我有这两张桌子:
表 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 我得到 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
查询 version1B:我删除了 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 个查询?
我知道我可以在 Query version1 之上进行一个新的查询,得出正确的总和。但我想避免为此目的进行 2 次查询。
【问题讨论】:
-
您如何知道哪个客户的费率是多少?如果您通过
Type列,所有 3 个费率都与 Customer 表中的每一行连接,因此您得到 180 (3*60) -
有没有第三张表来描述ReportCountry和Area的关系?这是您尝试编写的查询的关键
-
我不知道每个客户的费率。我同意这是 table2 的糟糕表格设计。但只需将 table2 视为某种主表,它可以保存更多的静态数据,而不是与单个客户相关联,而是与 Type 或 ReportCountry 相关联。
-
没有第三张表。所以我的问题是按照它们的方式构建表格,如何在这些条件下做出正确的计算总和。
标签: sql ms-access aggregate-functions