2013-03-03 155 views
1

我有两张表,指南可用性指南是指南的列表,并且可用性是针对特定指南了解信息的日期的列表。例如03/03/14 - 指南3 - 可用05/03/14 - 指南1 - 忙碌。如果指南在某一天的可用性尚不清楚,那么当天没有条目可用性Access中的查询(添加缺失值)

我想编写一个查询,以便在接下来的三天内返回所有指南的状态列表。如果状态未知,则会说未知

我确定在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 

P.S:有人建议我可能需要做出第三个表列出了所有用于未来10年的日期。如果它有助于解决方案,这不会是一个问题

+0

数据库引擎将使用哪些数据源为您提供具有Mar 5 2013日期的行?这个日期不存在于你的任何一张表格中,但它必须来自某个地方。你有单独的日历表,每日有一行吗?如果不是,你会愿意创建一个吗? – HansUp 2013-03-03 15:19:24

+0

指南和可用性表之间是否存在关系? – DevelopmentIsMyPassion 2013-03-03 15:19:32

+0

@HansUp如果有必要,我不介意创建一个包含很长日期列表的表格。不过,如果这也可以,我宁愿用第二个查询来完成。 – 2013-03-03 15:24:51

回答

1

如果您仅限于访问,您将无法使用递归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,您需要使用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; 
+0

非常感谢。我不知道这将会转化为视觉查询编辑器。你看到的麻烦是我甚至无法打开SQL输入框,并且必须在看起来像这样的系统中执行所有操作http://blogs.office.com/resized-image.ashx/__size/550x0/__key /CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-53/7752.QueryAccess.png)。当然会有一个去。 – 2013-03-04 02:13:03

+0

而像这样的系统应该有一个“查看”按钮,它有几个选项,其中包括“SQL” – cha 2013-03-04 02:54:21

+0

恐怕它没有。有了桌面数据库,它会完全禁用Access 2013 Web Apps。 – 2013-03-04 04:05:55