我有一个活动条目的表activities
,例如:
ID | Date | Activity | Participant
---+------------+----------+
1 | 11/30/2011 | Skiing | Alice
2 | 11/29/2011 | Diving | Gary
3 | 10/15/2011 | Running | Therese
和我想查询,对于给定的日期范围,哪些天有活动,哪些天没有任何活动,对于每个参与者,例如,对于11/29-11/30,
Date | Activity | Participant
------+-----------+------------
11/29 | | Alice
11/30 | Skiing | Alice
11/29 | Diving | Gary
11/30 | | Gary
11/29 | | Therese
11/30 | | Therese
我目前的计划是制作一个表allDates
的所有日期在一年中,采取笛卡尔乘积查询cartDateParticipant
:
select date,participant from allDates,(select distinct participant from activities) as participants
和左连接查询activities
:
select a.date, c.activity, c.participant from allDates a
left join
cartDateParticipant c
on
a.date=c.date
and
a.participant=c.participant
可以工作,但这意味着我必须为用户输入的任何可能的日期范围保留一个日期表。是否有任何方法可以在访问中生成一系列日期,而不必将其存储为表?或者是否有更好的方式来编写这个查询?
编辑:客户最终让步了,认为空白行是不必要的,所以我只是把它写为一个标准的查询。
既然没有人回答过,我就冒昧地回答一下。创建一个日期表可能不是特别酷或聪明。然而,它很容易理解,因此也很容易实现和维护。我会坚持使用这种方法,并说,"不,没有更好的方法来编写查询"使用MS Access