运行 访问查询总数

Running Total in Access Query

我需要在我的访问查询中添加一个 "Running Total" 列。这样做的目的是确定在给定时间有多少个空位。

有一个名为 "Open Date" 的字段,我想按升序排列。

在某些情况下,多个地点在同一天营业,如下所示:

╔══════════╦═══════════╦═══════════════╦
║ Location ║ Open Date ║ Running Total ║  
╠══════════╬═══════════╬═══════════════╬
║        1 ║ 1/1/1990  ║             1 ║
║        2 ║ 1/3/1990  ║             2 ║
║        5 ║ 1/3/1990  ║             3 ║
║        3 ║ 2/18/1991 ║             4 ║
║        6 ║ 3/17/1992 ║             5 ║
║        4 ║ 4/1/1995  ║             6 ║
╚══════════╩═══════════╩═══════════════╩

所以在这种情况下,我可以说在 1995 年 4 月 1 日,有 6 个空位。

我试过使用 DSum 和 DCount,但它们都没有给出我想要的结果。


更新:

这是我目前使用的代码:

SELECT t1.[store sort], t1.[soft opening],
    (SELECT COUNT(t2.[store sort]) FROM [storelist query] as  t2 
     WHERE Format(t2.[soft opening], "yyyy-mm-dd") & "-" & t2.[store sort] <= 
           Format(t1.[soft opening], "yyyy-mm-dd") & "-" & t1.[soft opening]) AS Running_Total
FROM  [storelist query] as t1
ORDER BY Format(t1.[soft opening], "yyyy-mm-dd") & "-" & t1.[store sort];

但是,这里是输出:

+------------+--------------+---------------+
| store sort | soft opening | Running_Total |
+------------+--------------+---------------+
|          1 | 8/1/1980     |             1 |
|         10 | 4/1/1985     |             2 |
|          2 | 10/1/1986    |             2 |
|          3 | 4/1/1987     |             4 |
|          4 | 10/1/1987    |             4 |
|          5 | 3/1/1988     |             5 |
+------------+--------------+---------------+

注意:这是使用数据。前面的示例只是我用于演示目的的示例数据。

如您所见,这并不是您想要的效果。

在这种情况下,商店 2 的总数应该是 运行 3,因为它是第三家商店。商店 4 应该有 运行 总共 5 家商店。商店 5 应该有 运行 总共 6 家商店,等等

不幸的是,MS Access 没有像 Oracle 和其他软件那样内置任何非常有用的功能。这是在这些系统上使用 RANK 进行分区的完美应用。

对你来说幸运的是,我以前不得不使用同样的解决方法并为你提供了一个解决方案:

SELECT t1.[Location], t1.[Open Date],
    (SELECT COUNT(t2.[Location]) FROM My_Table t2 
     WHERE Format(t2.[Open Date], "yyyy-mm-dd") & "-" & t2.[Location] <= 
           Format(t1.[Open Date], "yyyy-mm-dd") & "-" & t1.[Location]) AS Running_Total
FROM My_Table t1
ORDER BY Format(t1.[Open Date], "yyyy-mm-dd") & "-" & t1.[Location];

它看起来很丑陋,但我在 Access 中使用您的示例数据对其进行了测试并且它有效。本质上,它针对您选择的相同 table 运行内联查询,并检查有多少主键小于或等于当前记录。在这种情况下,我必须从日期和位置派生出一个主键,但如果您有另一个没有显示的键,那也没有理由不起作用。它必须是完全独一无二的。