1

我有两张桌子,GuidesAvailabilityGuides是指南列表,Availability是已知特定指南信息的日期列表。例如03/03/14 - Guide 3 - Available05/03/14 - Guide 1 - Busy。如果尚不知道某一天指南的可用性,则该天根本没有可用性条目。

我想编写一个查询,该查询将返回未来三天内所有指南的状态列表。如果状态未知,它将显示Unknown

我确信在 SQL 中这个任务是绝对可行的,但是我必须在 Access 2013 中编写一个 Web 应用程序。这意味着我必须在 Access 中使用查询编辑器。有专业人士可以提供一些指导吗?如果问题中有任何不清楚的地方,请说出来。

Example query output:
03/03/2013 - Guide 1 - Busy
03/03/2013 - Guide 2 - Unknown
03/03/2013 - Guide 3 - Unknown
04/03/2013 - Guide 1 - Available
04/03/2013 - Guide 2 - Available
04/03/2013 - Guide 3 - Unknown
05/03/2013 - Guide 1 - Unknown
05/03/2013 - Guide 2 - Unknown
05/03/2013 - Guide 3 - Unknown

Table: Guides
Guide 1
Guide 2
Guide 3

Table: Availability
03/03/2013 - Guide 1 - Busy
04/03/2013 - Guide 1 - Available
04/03/2013 - Guide 2 - Available

PS:有人建议我可能需要制作第三张表格,列出未来 10 年的所有日期。如果它有助于解决方案,这将不是问题

4

1 回答 1

1

如果您仅限于 Access,您将无法使用递归 CTE(如果有兴趣,请在谷歌上找到它们)。

因此,您必须创建一个包含所有日期的表。如果该表名为 AllDates,并且日期字段为 Dte,则查询将如下所示(您可能需要按日期范围过滤以限制返回的行数,否则您将看到所有 10 年的记录):

SELECT Availability.Dte, Availability.Guide, Availability.Status
FROM Availability INNER JOIN Guides ON Availability.Guide = Guides.Guide
UNION ALL
SELECT  AllDates.Dte, Guides.Guide, 'Unknown' AS Status
FROM AllDates, Guides
WHERE NOT EXISTS (SELECT 1 FROM Availability WHERE Availability.Dte = AllDates.Dte And Availability.Guide = Guides.Guide)
ORDER BY 1, 2;

对于 Access 的 Web 版本,您将需要使用 2 个查询。第一个 ( DatesGuides) 将列出所有日期的所有指南,其语法很简单:

SELECT Guides.Guide, AllDates.Dte
FROM AllDates, Guides;

第二个查询将与第一个查询左连接。它的语法是:

SELECT DatesGuides.Dte, DatesGuides.Guide, Nz([Status],'Unknown') AS Expr1
FROM Availability RIGHT JOIN DatesGuides ON Availability.Dte = DatesGuides.Dte AND Availability.Guide = DatesGuides.Guide;
于 2013-03-04T01:46:18.033 回答