【发布时间】:2015-12-07 19:55:49
【问题描述】:
我正在处理 Access 中的 MakeTable 查询。我想这样做,以便正在创建的表中的一个字段将是从 2015 年 1 月 2 日到 2015 年 11 月 30 日按时间顺序排列的日期列表。这是如何在 Access 查询设计视图中完成的?
【问题讨论】:
标签: ms-access
我正在处理 Access 中的 MakeTable 查询。我想这样做,以便正在创建的表中的一个字段将是从 2015 年 1 月 2 日到 2015 年 11 月 30 日按时间顺序排列的日期列表。这是如何在 Access 查询设计视图中完成的?
【问题讨论】:
标签: ms-access
您可以创建查询:
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);
【讨论】:
我会创建一个包含三个字段的表:
[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]
【讨论】: