2011-06-07 45 views
1

这里的问题:返回访问记录与零,而不是空

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

回答

0

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

0

您可以为所有列实现零行为的一行表。在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条款(“列别名“)来自物化表。