2016-09-26 100 views
0

我想在MS Access中计算12个月的运行总数。在Oracle SQL中,我将使用窗口函数来实现此功能,如MS Access - 运行12个月的总计

SELECT date, SUM(salesvol) OVER (ORDER BY date ROWS 11 PRECEDING) AS running_tot FROM table1 

但显然MS Access不支持窗口功能。我最初的想法是使用datediff函数编写查询,但因为我的日期变量是varchar格式,所以我认为这不是一个切实可行的方法。

我的数据集由两列组成:日期(VARCHAR)和salesvol(NUMBER):

date salesvol 
200901 473560 
200902 426204 
200903 473560 
200904 662984 
200905 473560 
200906 662984 
200907 615628 
200908 236780 
200909 426204 
200910 331492 
200911 426204 
200912 378848 
201001 236780 
201002 426204 
201003 426204 
201004 142068 
201005 426204 
201006 520916 
201007 568272 
201008 520916 
201009 520916 
201010 520916 
201011 568272 
201012 947120 

我的期望的输出是这样的:

date salesvol  running_tot 
200901 473560 473560 
200902 426204 899764 
200903 473560 1373324 
200904 662984 2036308 
200905 473560 2509868 
200906 662984 3172852 
200907 615628 3788480 
200908 236780 4025260 
200909 426204 4451464 
200910 331492 4782956 
200911 426204 5209160 
200912 378848 5588008 
201001 236780 5351228 
201002 426204 5351228 
201003 426204 5303872 
201004 142068 4782956 
201005 426204 4735600 
201006 520916 4593532 
201007 568272 4546176 
201008 520916 4830312 
201009 520916 4925024 
201010 520916 5114448 
201011 568272 5256516 
201012 947120 5824788 

回答

0

转换将varchar日期日期格式。您可以将日期用作该月的第一天。请参阅link进行转换。

然后您可以参考link以获得跑步总数。

+0

我猜你错过了这是Access。 – Gustav

+0

您可以使用以下表达式将其转换为Date:'CDate(Format(“200910”,“@@@@/@@”))'但实际上你不需要这样做,因为像“200910”等字符串是完美的可分类的_as is_。 – Gustav