MS Access 在所有值中添加空值

Posted

技术标签:

【中文标题】MS Access 在所有值中添加空值【英文标题】:MS Access adding nulls across all values 【发布时间】:2014-05-02 15:50:09 【问题描述】:

我正在尝试在所有输出中添加空值。因此,对于我的“资产”列表,我想要一个“A”、“B”和“C”的条目——如果有关联的数字,我希望它显示,但如果没有关联的数字,我想要有一行为空的数字。 (对于所有资产,我想要 3 行)

我创建了一个包含条目“A”、“B”和“C”的表,并在该表和执行我的计算的查询之间创建了一个连接。已创建空值,但不是每个条目有 3 行,而是所有空值都在顶部的一行中。

我使用了以下 SQL:

SELECT Query.Assets, [A/B/C].[A/B/C], Query.[Number]
FROM [A/B/C] LEFT JOIN Query ON [A/B/C].[A/B/C] = Query.[Type];

有没有办法将空值强制到每个资产中,而不是将它们全部集中在一起? 注意:'Type' 和 'A/B/C' 都包含相同的字符 - A、B 或 C

谢谢!

【问题讨论】:

【参考方案1】:

left join 之前需要一个cross join

SELECT q.Assets, abc.[A/B/C], q.[Number]
FROM ([A/B/C] abc CROSS JOIN
      (SELECT DISTINCT Q.Assets FROM Query q) qa
     ) LEFT JOIN
     Query q
     ON abc.[A/B/C] = a.[Type] and q.Assets = qa.Asssets;

Access 在连接中有一些字符串限制。如果上述方法不起作用,您可以使用交叉连接和条件聚合来做一些事情:

SELECT q.Assets, abc.[A/B/C],
       MAX(iif(abc.[A/B/C] = q.[Type], q.[Number], NULL))
FROM ([A/B/C] abc CROSS JOIN
     Query q
GROUP BY q.Assets, abc.[A/B/C], q.[Number];

【讨论】:

【参考方案2】:

这个 Stack Overflow 讨论告诉我 CROSS JOIN 在 Access 中不可用:

Multiple (left, cross?) JOINs in MS Access

在 Access 2010 中是否有其他有效的解决方案来创建空值?还有其他解决方法吗?

【讨论】:

【参考方案3】:

这应该可以满足您的要求:

SELECT Query.Assets, [A/B/C].[A/B/C], SWITCH(Query.Type = [A/B/C].[A/B/C], Query.[Number ], Query.Type = [A/B/C].[A/B/C], NULL) AS QueryNumber FROM Query, [A/B/C]

【讨论】:

以上是关于MS Access 在所有值中添加空值的主要内容,如果未能解决你的问题,请参考以下文章

检查 MS Access SQL 语句中的空值

如何在 MS Access 中创建 Pivot 以避免一种类型的记录出现空值?

如何在 MS Access 2010 中的单元格中显示空值

连接到 ODBC 时出现 MS Access 错误

MS ACCESS 2016 - 使用 Null 进行查询的标准

在 MS Access 中使用表 1 中的所有数据和列创建表,并添加表 2 中的行