在Access查询中运行Total

时间:2017-06-13 23:19:56

标签: ms-access ms-access-2010

我需要在Access Query中添加“Running Total”列。这样做的目的是确定在给定时间有多少个开放位置。

我希望在升序中计算一个名为“开放日期”的字段。

在某些情况下,多个位置会在同一天打开,如下所示:

╔══════════╦═══════════╦═══════════════╦
║ 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 |
+------------+--------------+---------------+

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

正如您所看到的,这不是预期的效果。

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

1 个答案:

答案 0 :(得分:1)

不幸的是,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中使用您的示例数据对其进行了测试,并且它可以正常运行。实质上,它针对您选择的同一个表运行内联查询,并检查有多少主键小于或等于当前记录。在这种情况下,我必须从日期和位置派生一个主键,但如果你有另一个键,你没有显示,没有理由不会起作用。它必须是完全独特的。