Sql 返回具有零而不是空的访问记录集

Sql 返回具有零而不是空的访问记录集,sql,sql-server,ms-access,Sql,Sql Server,Ms Access,问题是: 我有一个提供报告的Access查询,它有时不会返回特定条件下的任何记录。我希望在报告中显示零,而不是空行(当前正在返回一个空记录集)。 如果初始查询中没有匹配的记录,是否有一种SQL解决方案(可能使用某种union语句和/或嵌套SQL)总是返回一条记录(带零)?一种可能的解决方案是使用相同的主键创建第二个表,然后只添加一条记录。在查询中,选择第二个表中的所有记录作为联接类型,包括第一个表中没有匹配记录的记录。选择第一个表中的所有字段作为输出。您可以具体化一个所有列为零的单行表。这是在A

问题是:

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

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

您可以具体化一个所有列为零的单行表。这是在Access(ACE、Jet等)中实现的一个小问题,因为它不支持行构造函数,并且来自的
必须解析为基表。换句话说,您将需要一个保证始终包含至少一行的表

这对我来说不是问题,因为我的数据库总是包含辅助表,例如a、整数序列表等。对于exmaple,使用我的3000行日历表具体化一行表、全零表:

SELECT DISTINCT 0 AS c
  FROM Calendar;
然后,我可以
UNION
将我的查询与我的物化表合并,但可以包括一个,以确保只有当我的查询为空集时,所有零行才会出现在结果集中:

SELECT c 
  FROM T       
UNION 
SELECT 0
  FROM Calendar
 WHERE NOT EXISTS (
                   SELECT c 
                     FROM T
                  );
注意使用
UNION
可以从物化表中删除
DISTINCT
关键字和
AS
子句(“列别名”)