我有一个名为Records Query
的查询,正在使用表格输入信息。
每条记录都有一个日期。
在另一个表中,我有一个日期范围列表以及该范围的名称。也就是说,第一列是Range name
,第二列是Start date
,第三列是End date
。
我希望Records Query
的最后一栏显示该特定范围所在的日期范围的名称。
例如,如果我具有以下日期范围:
+------------+----------+----------+
| Start date | End date | Name |
+------------+----------+----------+
| Jan 1 | Jan 10 | session1 |
| Jan 11 | Jan 20 | session2 |
+------------+----------+----------+
如果Records Query
中该记录的日期为1月2日,则列Session
的值应自动为session1
如果有人可以提供帮助,将不胜感激。
答案 0 :(得分:1)
您可以通过简单的Where子句加入:
Select
[Records Query].*,
[Date Ranges].[Name] As [Session Name]
From
[Records Query],
[Date Ranges]
Where
[Records Query].[Date] Between [Date Ranges].[Start date] And [Date Ranges].[End date]
答案 1 :(得分:0)
假设您的日期是使用DateTime
字段存储的,并且日期范围是连续的(没有空格),则可以使用以下相关子查询为日期确定合适的会话名称:
SELECT q.*,
(
SELECT TOP 1 r.Name
FROM Ranges r
WHERE q.MyDate <= r.[End date] ORDER BY r.[End date]
) AS SessionName
FROM [Records Query] q
在这里,我假设您的日期范围存储在名为Ranges
的表中,并且您的Records Query
查询中的日期字段称为MyDate
(更改此值以适合您的数据)
在上面的示例中,我假设您具有以下设置:
不幸的是,您不能简单地将此子查询注入到UPDATE
查询中-
UPDATE [Records Query] q
SET q.Session =
(
SELECT TOP 1 r.Name
FROM Ranges r
WHERE q.MyDate <= r.[End date] ORDER BY r.[End date]
)
...由于结果查询将不可更新(因为新值引用了要更新的表)。
因此,您可能需要将会话名称和主键从您的Records Query
查询输出到本地表,然后该表可用于更新查询-希望其他人可能会知道一种更优雅的方式避免这种情况。