返回带有零而不是空值的 Access 记录集

Posted

技术标签:

【中文标题】返回带有零而不是空值的 Access 记录集【英文标题】:Returning an Access recordset with zeros instead of nulls 【发布时间】:2011-06-07 09:05:10 【问题描述】:

问题来了:

我有一个提供报告的 ​​Access 查询,该查询有时不会返回符合某些条件的任何记录。我想在报告中显示零而不是空行(当前正在返回空记录集)。 如果初始查询中没有匹配的记录,是否有一种 SQL 解决方案(可能使用某种联合语句和/或嵌套 SQL)总是返回一条记录(带零)?

【问题讨论】:

【参考方案1】:

一种可能的解决方案是创建具有相同主键的第二个表,并仅添加一条记录。在您的查询中,选择第二个表中的所有记录作为连接类型,包括第一个表中没有匹配记录的记录。选择第一个表中的所有字段作为输出。

【讨论】:

【参考方案2】:

您可以实现一个所有列都为零的单行表。这在 Access(ACE、Jet 等)中实现起来有点麻烦,因为它不支持行构造函数,并且 FROM 必须解析为基表。换句话说,您需要一个保证始终包含至少一行的表。

这对我来说不是问题,因为我的数据库总是包含辅助表,例如calendar table,整数序列表等。例如,使用我的 3000 行日历表实现一个单行全零表:

SELECT DISTINCT 0 AS c
  FROM Calendar;

然后我可以UNION 我的查询与我的具体化表,但包括一个antijoin 以确保当我的查询是空集时全零行仅出现在结果集中:

SELECT c 
  FROM T       
UNION 
SELECT 0
  FROM Calendar
 WHERE NOT EXISTS (
                   SELECT c 
                     FROM T
                  );

注意UNION 的使用允许我从物化表中删除DISTINCT 关键字和AS 子句(“列别名”)。

【讨论】:

以上是关于返回带有零而不是空值的 Access 记录集的主要内容,如果未能解决你的问题,请参考以下文章

MS ACCESS:打印基于记录集而不是 record_ID 的报告

使用带有记录集的 Access VBA 和 SQL 添加和删除记录

为啥 ADO 记录集返回的记录比基础 Access 查询多

为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?

数据集重新调整 0 条记录,但在 access 2013 中执行时,相同的查询返回多条记录

带有 ADODB 记录集的 MS Access ListBox 列属性创建错误 424 需要对象