问题在于:
我有一个提供报告的Access查询,有时不返回某些条件的任何记录。我想在报告中显示零而不是空行(当前正在返回空记录集)。 是否存在一个SQL解决方案(可能使用某种联合语句和/或嵌套SQL),如果初始查询中没有匹配的记录,总会返回一条记录(带零)?
答案 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
子句(“列别名”)。