【问题标题】:MS Access 2010 Running Total in QueryMS Access 2010 在查询中运行总计
【发布时间】:2023-03-07 12:03:01
【问题描述】:

我不是 Access 的忠实粉丝,但对于这个项目,我被要求创建一个 Access 数据库。我为其他数据库类型创建了类似的东西,所以它并不太难。我已经弄清楚了大部分,但运行的总数让我头疼。

我有下表:表名attendanceView

查询:SELECT * FROM attendanceView

======================================================================================
agentID    |     incurrredDate     |   points    |    OneFallOff     |    TwoFallOff
======================================================================================
chtall     |       10/7/2013       |     2       |       2           |        2
chtall     |       10/15/2013      |     2       |       2           |        2
chtall     |       11/26/2013      |     2       |       2           |        2
chtall     |       12/17/2013      |     2       |       2           |        2
vimunson   |       7/22/2013       |     2       |       2           |        2
vimunson   |       7/29/2013       |     2       |       1           |        1
vimunson   |       12/6/2013       |     1       |       1           |        1

此查询执行查找OneFallOffTwoFallOff 的值所需的操作。但是我需要找到一种方法来为每个agentID 运行总计TwoFallOff。例如chtall 有四条记录,如下图所示:

==================================================================================================
agentID    |     incurrredDate     |   points    |    OneFallOff     |    TwoFallOff     |   total
==================================================================================================
chtall     |       10/7/2013       |     2       |       2           |        2         |    2
chtall     |       10/15/2013      |     2       |       2           |        2         |    4
chtall     |       11/26/2013      |     2       |       2           |        2         |    6
chtall     |       12/17/2013      |     2       |       2           |        2         |    8
vimunson   |       7/22/2013       |     2       |       2           |        2         |    2
vimunson   |       7/29/2013       |     2       |       1           |        1         |    3
vimunson   |       12/6/2013       |     1       |       1           |        1         |    4

我试过DSUM() 没用,或者我用错了。如果在表中不清楚,total 列会在代理更改时重置回 0。

【问题讨论】:

    标签: sql ms-access ms-access-2010


    【解决方案1】:

    您可以通过相关子查询获得所需的内容。

    SELECT
        a1.agentID,
        a1.incurrredDate,
        a1.points,
        a1.OneFallOff,
        a1.TwoFallOff
        (
            SELECT Sum(a2.TwoFallOff)
            FROM attendanceView AS a2
            WHERE
                    a2.agentID = a1.agentID
                AND a2.incurrredDate <= a1.incurrredDate
        ) AS total
    FROM attendanceView AS a1;
    

    您也可以使用DSum 执行此操作,但是您需要在DSum WhereCondition 选项中使用带有agentIDincurrredDate 的分隔符。这似乎比子查询方法更努力,而且我发现它更容易出错。

    SELECT
        a.agentID,
        a.incurrredDate,
        a.points,
        a.OneFallOff,
        a.TwoFallOff,
        DSum
            (
                "TwoFallOff", "attendanceView",
                "agentID = '" & a.agentID & "' " &
                "AND incurrredDate <= " & 
                Format(a.incurrredDate, "\#yyyy-m-d\#")
            ) AS total
    FROM attendanceView AS a;
    

    两个查询都使用 Access 2007 中的示例数据返回您请求的结果。

    【讨论】:

    • 当我在 Access 2016 上运行第一个代码块时,我收到以下错误:“函数参数无效”。似乎无法从子查询中访问变量 a1(因此不在其范围内)
    • FROM attendanceView AS a1后添加ORDER BY a1.incurredDate问题解决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多