【问题标题】:Running an Access query on a FILTERED table对 FILTERED 表运行 Access 查询
【发布时间】:2021-12-28 16:42:52
【问题描述】:

我有一些相关的表,我想在这些表上运行 Totals/Group By 查询。

我的“Tickets”表有一个名为“PickDate”的字段,它是订单/票的履行日期。

我想按工作日(姓名)(计算字段)进行分组,以便将一周中同一天的某些客户的结果分组。然后可以计算每个客户每个工作日的平均票务完成时间。如下所示。

--CustName---Day---AvTime

Customer 1 - MON - 72.3
           - TUE - 84.2
           - WED - 110.66
           ..etc
           ..etc
           ..etc
Customer 2 ..

这很好,但我遇到的问题是,当这个查询运行时,它适用于票表中的每条记录。出于某些原因,对于某些报告,查询所引用的数据应限制在一个日期范围内;例如跟踪数周内持续时间的变化。

在查询属性中,有一个属性,“过滤器”,我可以在其中添加一个字符串,例如:

"([qryCustomerDetails].[PickDate] Between #11/1/2021# And #11/14/2021#)"

过滤结果。唯一的问题是,由于每个日期都是唯一的,因此类似日期(例如“星期一”)的“分组依据”会被这个唯一日期“2021 年 11 月 1 日”覆盖。该查询仅在将 PickDate 作为字段删除时才有效。但是,我无法访问它来过滤它。

我想要实现的目标是一样的;在“Tickets”表本身过滤两个日期之间的结果,然后有一个可以在那个 filtered 表上运行的查询。

有什么方法可以实现吗?

这里是查询的 SQL 供参考。

FROM tblCustomers INNER JOIN tblTickets ON tblCustomers.CustomerID = tblTickets.CustomerID
GROUP BY tblCustomers.Customer, WeekdayName(Weekday([PickDate]),False,1), tblCustomers.Round, Weekday([PickDate])
ORDER BY tblCustomers.Round, Weekday([PickDate]);

【问题讨论】:

  • 您发布的 SQL 没有 SELECT 或 WHERE 子句。我从未在查询中使用过 Filter 属性。刚试过,它什么也没做。我将过滤条件放在设计网格中的字段下,总行上的 WHERE 和未选中的显示。这行得通。可以引用表单上的控件来获取动态参数。或者构建一个报告并使用它的排序和分组功能和聚合计算。打开时应用过滤条件以报告。这允许显示详细数据以及汇总计算。
  • 是的,我一定是复制/粘贴错误或格式错误

标签: sql ms-access filter


【解决方案1】:

您可能遇到了两个问题。第一个问题是,要通过未总计字段过滤总计查询的结果,您使用 HAVING 而不是 WHERE。第二个问题是查询时不存在像 Day 这样的计算字段。你不能说Day > Mon。相反,您必须重复 Day 的计算:Having CalculateDay(PickDate) > Monday 设计师通常会自动确定您是否想要拥有或在哪里。所以这是我的例子:

这会为您提供 SQL:

SELECT Tickets.Customer, WeekdayName(Weekday([PickDate])) AS [Day], Avg(Tickets.Time) AS AvTime
FROM Tickets
GROUP BY Tickets.Customer, WeekdayName(Weekday([PickDate])), Tickets.PickDate
HAVING (((Tickets.PickDate) Between #11/16/2021# And #11/17/2021#))
ORDER BY Tickets.PickDate;

【讨论】:

  • 谢谢,这正好解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 2014-08-17
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多