返回带有零而不是空值的 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 添加和删除记录
为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?