访问 2013 年复杂的 SUM 查询/报告

Posted

技术标签:

【中文标题】访问 2013 年复杂的 SUM 查询/报告【英文标题】:Access 2013 Complicated SUM on Query/Report 【发布时间】:2015-06-02 14:41:33 【问题描述】:

我正在尝试在 Access 2013 中创建一个显示当前状态和日期的查询,同时忽略旧的状态记录。

我有三张桌子:

customer 
-id (pk) 
-last 
-first

status 
-id (pk) 
status 
description

status-customer 
id (pk) 
customer_id 
status_id 
status_date 
notes

我想创建一个客户列表,其中包含他们处于特定状态的天数。

考虑以下连接表:

Last        First        Customer_id         Status_date       Status
John         Smith              1               05/1/2015        A
John         Smith              1               05/10/2015       B
John         Smith              1               05/14/2015       A
John         Smith              1               05/30/2015       B 
Mary         Johnson            2               05/26/2015       A

我想要这样的东西:

                                                                Days in
 Last        First        Customer_id         Status_date       Status A
 John         Smith              1               05/1/2015        25     
 Mary         Johnson            2               05/26/2015       5

请注意,计算的天数仅为 A 和 B 之间的天数。因此,对于 John Smith,记录 1 和 2 之间的间隔被添加到记录 3 和 4 之间的间隔中。如果状态没有从 A 变为 B,则使用当前日期计算总数。

谢谢。

【问题讨论】:

【参考方案1】:

相关子选择、派生表、分组依据等。我不知道MS Access如何减去日期,所以SUM(statusB - statusA)可能需要调整。

select Last,
       First,
       Customer_id,
       MIN(statusdateA),
       SUM(statusdateB - statusdateA)
(
select Last,
       First,
       Customer_id,
       Status_date as statusdateA,
       (select min(t2.Status_date) from tablename t2
        where t2.Status_date > t1.Status_date
          and t2.status = 'B') as statusdateB
from tablename t1
where status = 'A'
) dt
group by Last, First, Customer_id

【讨论】:

以上是关于访问 2013 年复杂的 SUM 查询/报告的主要内容,如果未能解决你的问题,请参考以下文章

如何使用户在提示中键入的输入日期显示在报告中?微软访问 2013

Access 2013 无法在应用程序最小化时运行查询

操作必须使用可更新的查询 - 访问

访问查询分组/总和

在访问报告上创建列和行

访问我如何创建一个显示有多少相同的报告,包括如果只有 1