【问题标题】:Query in Access (adding missing values)Access 中的查询(添加缺失值)
【发布时间】:2013-03-03 15:00:34
【问题描述】:

我有两个表格,GuidesAvailabilityGuides 是指南列表,Availability 是已知特定指南信息的日期列表。例如 03/03/14 - 指南 3 - 可用05/03/14 - 指南 1 - 忙碌。如果尚不知道某一天的导游是否有空,则Availability 中根本没有该天的条目。

我想编写一个查询,该查询将返回未来三天内所有指南的状态列表。如果状态未知,它将显示 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

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

【问题讨论】:

  • 数据库引擎应该使用什么数据源来为您提供日期为 2013 年 3 月 5 日的行?您的任何一张表中都没有该日期,但它必须来自某个地方。您是否有一个单独的日历表,每个日期一行?如果没有,你愿意创建一个吗?
  • 指南和可用性表之间有关系吗?
  • @HansUp 如果有必要,我不介意创建一个包含一长串日期的表格。但是,如果可能的话,我更愿意使用第二个查询来完成。
  • 如果你有 2 个表之间的关系,那么我认为你只需要左连接和 iif 函数
  • 我删除了那条评论,因为它听起来太刺耳了。

标签: sql ms-access


【解决方案1】:

如果您受限于 Access,您将无法使用递归 CTE(如果有兴趣,请通过 Google 搜索了解它们)。

因此,您必须创建一个包含所有日期的表格。如果表名为 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;

【讨论】:

  • 非常感谢。我不知道这将如何轻松地转化为可视化查询编辑器。你看问题是我什至无法打开 SQL 输入框,必须在一个看起来像这样的系统中做所有事情blogs.office.com/resized-image.ashx/__size/550x0/__key/…)。不过肯定会试一试的。
  • 像这样的系统应该有一个“查看”按钮,里面有几个选项,包括“SQL”
  • 恐怕没有。使用桌面数据库可以,但 Access 2013 Web Apps 完全禁用它。
  • 遗憾的是,帮助文件中说的其中一件事是不支持“联合”查询。有什么办法吗?有限的查询集太痛苦了。
  • 我不相信任何人会看到这个对话,因为这个问题不在“新问题”列表的顶部条目中。因此,如果您还有其他问题,请再次询问,确保您没有“重复”,否则将被标记为“重复”。
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2021-05-08
相关资源
最近更新 更多