【问题标题】:MS-Access - How to add records up when performing a queryMS-Access - 如何在执行查询时添加记录
【发布时间】:2012-10-09 08:49:08
【问题描述】:

好的,这很复杂,但我对 Access 很陌生,所以也许这并不难。

我的数据库中有 3 个表:

客户 - 这包含基金所有客户的列表。其中一些客户在基金中拥有多个账户。结构:

ID | CliName
------------
1  | Joe Blogs Holdings
2  | John Doe Investments
etc...

ClientMap - 这基本上有一个所有帐户 的列表,另一个字段包含它属于哪个客户(拥有该帐户的客户的 ID)。

ID |     AccountName     |      ClientName      | ClientID (refs to ID in Clients)
------------
1  | Joe Blogs Safe Fund | Joe Blogs Holdings   | 1
2  | Joe Blogs Risk Fund | Joe Blogs Holdings   | 1
3  | John Doe Fund       | John Doe Investments | 2
etc...

估值 - 这是每个账户在任何给定日期的价值列表。

ID | ValuationDate |   Valuation  | AccName
------------
1  |  30/09/2012   |   1,469,524  | Joe Blogs Safe Fund
2  |  30/09/2012   |   1,767,134  | Joe Blogs Risk Fund
3  |  30/09/2012   |   239,561    | John Doe Fund
4  |  30/06/2012   |   1,367,167  | Joe Blogs Safe Fund
5  |  30/06/2012   |   1,637,121  | Joe Blogs Risk Fund
6  |  30/06/2012   |   219,241    | John Doe Fund

好的,所以我想运行一个查询,列出从客户表中选择的客户,并返回他们所有账户的估值总和。例如。 John Doe 只有一个帐户,因此查询结果如下所示:

ClientName           |  ValuationDate | Valuation
----
John Doe Investments |   30/09/2012   | 239,561
John Doe Investments |   30/06/2012   | 219,241 

但是,查询应该为 Joe Blogs 返回类似这样的内容:

ClientName           |  ValuationDate | Valuation
----
Joe Blogs Holdings   |   30/09/2012   | 3,236,658
Joe Blogs Holdings   |   30/06/2012   | 3,004,288

因此,对于添加的每个日期,它都会查找所有 Joe Blogs 帐户的总数,以提供总体估值。我该怎么做?

希望这很清楚,并且那些访问专家能够帮助我。 谢谢

到目前为止我有这个,但它并没有汇总每个日期的帐户,它只是单独列出它们:

SELECT ClientMap.AccName, Clients.ClientName, Valuations.ValuationDate, Valuations.Valuation
FROM (Clients INNER JOIN ClientMap ON Clients.ID = ClientMap.ClientID) INNER JOIN Valuations ON ClientMap.AccName = Valuations.AccName
WHERE (((Clients.ClientName) Like [Which Client?] & "*"));

【问题讨论】:

  • 这看起来更像是一个一般的 SQL 问题而不是 Access 特定的问题,因此我在这里添加了 SQL 标记。

标签: sql ms-access


【解决方案1】:

你应该先阅读http://www.w3schools.com/sql/
完成后,您将知道在何处以及如何使用聚合函数 [如本例中的 sum()]
祝你学习顺利

【讨论】:

  • 好的,所以我已经阅读了 SQL 指南,但我觉得所需的查询非常复杂,认为它使用“INNER JOIN”和“GROUP BY”。谁能给我更多的指点?
  • GROUP BY SQL 中的概念的工作方式与现实生活中的完全一样——如果你有一碗装满不同水果的碗,以便获得任何特定类型的计数,你必须按照你的任何分组对它们进行分组将选择 [类型/颜色/形状...],然后您在该分组中对它们进行计数/求和。
  • 到目前为止,您的 SQL 看起来是正确的,正如您已经了解到的那样 - 尝试在该分组中添加 GROUP BY Clients.ClientName, ClientMap.AccName, Valuations.ValuationDateSUM(Valuations.Valuation)
  • 感谢您到目前为止的帮助。我仍然不完全确定如何实施您所说的。这是我尝试过的:SELECT ClientMap.AccName, Clients.ClientName, Valuations.ValuationDate, Sum(Valuations.Valuation) AS SumOfValuation FROM (Clients INNER JOIN ClientMap ON Clients.ID = ClientMap.ClientID) INNER JOIN Valuations ON ClientMap.AccName = Valuations.AccName WHERE (((Clients.ClientName) Like [Which Client?] & "*")) GROUP BY ClientMap.AccName, Clients.ClientName, Valuations.ValuationDate; 但它仍然单独列出帐户
  • 如果您想要没有 ClientMap.AccName 的 Clients.ClientName 的总估值,而不是从 GROUP BY(和 SELECT)子句中删除 ClientMap.AccName。您的 SQL 现在正在执行的操作是为 EACH 不同的 ClientMap.AccName, Clients.ClientName, Valuations.ValuationDateGROUP BY 子句中的所有内容)获取我的 SUM(Valuation)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多