在Access查询中创建日期列表

6

我正在处理Access中的MakeTable查询。我希望在创建的表格中,其中一个字段是按照从2015年1月2日到2015年11月30日的时间顺序排列的日期列表。在Access查询设计视图中如何操作?

2个回答

13

您可以创建一个查询:

SELECT DISTINCT 
    Abs([id] Mod 10) AS N
FROM 
    MsysObjects;

将此保存为qdxNumber10

现在创建一个带有笛卡尔积(乘法)的查询来生成您的日期:

SELECT 
    DateAdd("d",[qdxNumber10_0].[N]+[qdxNumber10_1].[N]*10+[qdxNumber10_2].[N]*100,#2/1/2015#) AS [Date]
FROM 
    qdxNumber10 AS qdxNumber10_0, 
    qdxNumber10 AS qdxNumber10_1, 
    qdxNumber10 AS qdxNumber10_2
WHERE 
    DateAdd("d",[qdxNumber10_0].[N]+[qdxNumber10_1].[N]*10+[qdxNumber10_2].[N]*100,#2/1/2015#) <= #11/30/2015#;

在创建表格时,请将此作为源。

要生成当前年份的所有日期,请使用:

SELECT 
    DateAdd("d",[qdxNumber10_0].[N]+[qdxNumber10_1].[N]*10+[qdxNumber10_2].[N]*100,DateSerial(Year(Date()),1,1)) AS [Date]
FROM 
    qdxNumber10 AS qdxNumber10_0, 
    qdxNumber10 AS qdxNumber10_1, 
    qdxNumber10 AS qdxNumber10_2
WHERE 
    DateAdd("d",[qdxNumber10_0].[N]+[qdxNumber10_1].[N]*10+[qdxNumber10_2].[N]*100,DateSerial(Year(Date()),1,1)) <= DateSerial(Year(Date()),12,31);

或直接使用DateSerial

SELECT 
    DateSerial(Year(Date()),1,1+[qdxNumber10_0].[N]+[qdxNumber10_1].[N]*10+[qdxNumber10_2].[N]*100) AS [Date]
FROM 
    qdxNumber10 AS qdxNumber10_0, 
    qdxNumber10 AS qdxNumber10_1, 
    qdxNumber10 AS qdxNumber10_2
WHERE 
    DateSerial(Year(Date()),1,1+[qdxNumber10_0].[N]+[qdxNumber10_1].[N]*10+[qdxNumber10_2].[N]*100) <= DateSerial(Year(Date()),12,31);

3
我希望我能在这篇帖子上花更多的点赞,因为我真的想这么做。惊呆了! - thornomad

1
我会创建一个有三个字段的表格:
[Snapshot Date]   date
[CountA]          number
[CountB]          number

请在“快照日期”列中填写各种日期(包括您的日期)——您可以通过编程或从电子表格中剪切/粘贴来完成此操作。

然后保存类似于此的交叉表查询:

TRANSFORM Avg([All Dates].[CountB]) AS DeleteMe
SELECT [All Dates].[CountA]
FROM [All Dates]
WHERE [All Dates].[Snapshot Date] Between #1/2/2015# and #11/30/2015#
GROUP BY [All Dates].[CountA]
PIVOT [All Dates].[Snapshot Date];

一旦您保存了此查询,您应该能够切换到设计视图并查看设计器的外观。

假设上面的交叉表查询被命名为所有日期交叉表,您可以执行以下操作:

select *
into [My New Table]
from [All Dates Crosstab]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接