使用零而不是空值返回Access记录集

时间:2011-06-07 09:05:11

标签: sql sql-server ms-access

问题在于:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

对于所有列,您可以实现一行表为零。在Access(ACE,Jet,无论如何)中实现这是一个轻微的痛苦,因为它不支持行构造函数,并且FROM必须解析为基表。换句话说,您需要一个保证始终至少包含一行的表。

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

SELECT DISTINCT 0 AS c
  FROM Calendar;

然后我可以使用物化表UNION查询我的查询,但是包含antijoin以确保当我的查询为空集时,全0行只出现在结果集中:

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

请注意,使用UNION可以从物化表中删除DISTINCT关键字和AS子句(“列别名”)。