【问题标题】:Run Query for each result of another query - Access为另一个查询的每个结果运行查询 - Access
【发布时间】:2011-10-21 03:03:27
【问题描述】:

我正在尝试使用另一个查询的结果作为另一个查询的条件。在我的具体示例中,我可能有四个房屋,分别是“A”、“B”、“C”、“D”(名为 Homes 的表中字段的唯一值)。

我想通过另一个查询并针对每种房屋类型说,有多少百分比的居民(在 Residents 表中)已婚,我想通过使用 Count() 来计算 each 的数量 em> 家庭类型。

我需要使用 VBA 循环遍历结果吗?在更高的层次上提问,有没有办法将查询的结果用作另一个查询的输入 - 而不仅仅是将新查询的结果限制为先前查询的结果?

编辑:

在半伪代码中:

For each (result of previous query) Do
New query WHERE field1 = (row of previous query)
End Do

我想问的是,有没有办法在 Access 中使用 SQL 来完成这个?或者这是必须在 VBA 中完成的事情?

我知道如果它可以在 SQL 中完成,那将是最佳性能和最佳实践,但我在 SQL 方面相对缺乏经验,并且在线资源并不总是有帮助,因为 Access 有它自己特殊的 SQL 风格。

【问题讨论】:

  • 您是否能够编写自己的 SQL 或者您正在使用查询生成器之类的东西?
  • 我能够编写自己的 SQL 和 VBA,尽管我不熟悉 Access 的 VBA 风格。我想我还不清楚 - 基本上我是要根据先前的结果运行一个新查询。我已经编辑了原件以包含我想要的半伪代码。

标签: function ms-access vba


【解决方案1】:

由于您使用 VBA 来运行它,因此您可以遍历记录集,是的,您可以在下一个查询中使用来自一个查询的值。有很多资源可以提供帮助。

VBA: Working with RecordSets

Looping through Record Sets

Code through all records

【讨论】:

  • 我最终只是使用 VBA 运行查询,循环遍历我感兴趣的字段并将结果插入汇总表。
【解决方案2】:

要回答您的一般性问题,是的。您可以进行嵌套查询,即从表 a 中选择列 a,其中列 a =(从表 b 中选择列 b,其中列 b=x)

您可以根据需要深入到任意级别,但需要注意的是嵌套查询只能返回一列并带有特定的答案集。您还可以使用 select 语句作为列,即

select (select column b from table b) col b from table a ..... 不是确切的语法,但我必须从旧项目中挖掘一些示例才能找到它。

嵌套查询很有用,但对于您正在寻找的精度级别,存储过程或视图可能是更好的选择。只是为了便于使用,我会着眼于创建所需数据的视图,然后从该视图开始查询。比嵌套查询更灵活。

【讨论】:

  • 可能不需要子查询:group by 和 join 就足够了
  • 我知道查询可以嵌套,但我认为这并不能达到我想要的效果。如果我理解您的意思,我可以构建一个查询以仅选择“A”型房屋,然后运行另一个查询以获取我想要的统计信息。然后,我将对其他每种房屋类型重复该过程。我真正在寻找的是 - 有没有一种方法可以系统地为每个未确定数量的唯一结果运行查询,这些结果来自旨在查找此类唯一结果的查询?
猜你喜欢
  • 2021-06-30
  • 2015-11-30
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2014-08-18
  • 2010-10-31
  • 2023-04-02
  • 2018-10-17
相关资源
最近更新 更多