【问题标题】:Create a List of Dates in Access Query在访问查询中创建日期列表
【发布时间】:2015-12-07 19:55:49
【问题描述】:

我正在处理 Access 中的 MakeTable 查询。我想这样做,以便正在创建的表中的一个字段将是从 2015 年 1 月 2 日到 2015 年 11 月 30 日按时间顺序排列的日期列表。这是如何在 Access 查询设计视图中完成的?

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    您可以创建查询:

    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);
    

    【讨论】:

    • 我希望我能在这篇文章上花费更多的投票,因为我愿意。头脑=吹。
    【解决方案2】:

    我会创建一个包含三个字段的表:

    [Snapshot Date]   date
    [CountA]          number
    [CountB]          number
    

    Snapshot Date 列中填写各种日期(包括您自己的日期)——您可以通过代码执行此操作,也可以从电子表格中剪切/粘贴。

    然后保存一个类似这样的交叉表查询:

    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];
    

    (保存此查询后,您应该能够切换到设计视图并查看设计器的外观)

    假设上面的交叉表查询被命名为All Dates Crosstab,您可以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多