如何计算 Access 2010 表中所有列中的所有 NULL 值?
Posted
技术标签:
【中文标题】如何计算 Access 2010 表中所有列中的所有 NULL 值?【英文标题】:How can I count all the NULL values in all columns in an Access 2010 table? 【发布时间】:2012-05-11 16:43:18 【问题描述】:我需要能够计算 Access 2010 表的所有列中的所有 NULLS。我的具体意思是,在 30 列(字段)中,有大量包含部分数据的记录。
我想在整个表中数一下有多少是空的。
我在这个网站上阅读了标题为如何计算表中所有 NULL 值的文章,但那是指 SQL,而且我很抱歉承认对我来说太复杂了。
还有人知道更多线索吗?
:)
【问题讨论】:
对不起,我没有。因为我也没有从你的帖子中得到任何线索。 所以你要问的是......如果一行有 2 个空列,而下一行有 3 个空列,那么总共会给你 5 个吗? 【参考方案1】:对于单个字段,您可以使用简单查询。
SELECT Count(*) AS CountOfNulls
FROM MyTable
WHERE some_field Is Null;
如果您想在单个查询中分别计算多个字段的 Null,您可以执行以下操作:
SELECT
Sum(IIf(some_field Is Null, 1, 0)) AS NullsIn_some_field,
Sum(IIf(another_field Is Null, 1, 0)) AS NullsIn_another_field
FROM MyTable;
如果您想要所有 Null 的总计,而不是每列的计数,您可以将前一个查询用作子查询并将各个列的计数相加。
SELECT base.NullsIn_some_field + base.NullsIn_another_field AS total_nulls
FROM
(
SELECT
Sum(IIf(some_field Is Null, 1, 0)) AS NullsIn_some_field,
Sum(IIf(another_field Is Null, 1, 0)) AS NullsIn_another_field
FROM MyTable
) AS base;
OTOH,如果您希望完全避免使用 SQL,或者只是觉得这些语句过于复杂,则不需要使用 SQL。您可以在 VBA 过程中使用 DCount()
函数。
在即时窗口中使用数据库中的表名运行以下过程:
HowManyNulls "YourTable"
您可以使用 CTRL+g 键盘快捷键进入即时窗口。
Public Sub HowManyNulls(ByVal pTable As String)
Dim db As DAO.Database
Dim fld As DAO.Field
Dim tdf As DAO.TableDef
Dim lngNulls As Long
Dim lngTotal As Long
Set db = CurrentDb
Set tdf = db.TableDefs(pTable)
For Each fld In tdf.Fields
'lngNulls = DCount("*", pTable, fld.Name & " Is Null")
' accommodate field names which need bracketing ...
lngNulls = DCount("*", pTable, "[" & fld.Name & "] Is Null")
lngTotal = lngTotal + lngNulls
Debug.Print fld.Name, lngNulls
Next fld
Debug.Print "Grand total", lngTotal
Set fld = Nothing
Set tdf = Nothing
Set db = Nothing
End Sub
如果这些建议都不令人满意,请修改您的问题以帮助我们更好地了解您的需求。
【讨论】:
【参考方案2】:当您事先不知道列名时,没有简单的方法对表的“所有列”执行这种计数。
如果你想这样做,你必须编写一个程序来读取数据库的“元数据”,从该数据中提取列和表的列表,为每一列构建一个单独的 SQL 语句,然后执行该语句并将返回的数字添加到找到的 NULL 值的运行总数中。
这听起来像是您可能考虑追求的东西吗?如果是这样,您应该搜索有关获取 MS Access 数据库中的表列表和获取 Access 数据库中表的列列表的解决方案,然后将该信息与您已经从有关计算 NULL 的问题中获得的信息相结合在列中。
【讨论】:
【参考方案3】:计算所有列的表中的空值:
select count(*) from(select a from tt where a is null
union all
select b from tt where b is null
union all
select c from tt where c is null)
【讨论】:
以上是关于如何计算 Access 2010 表中所有列中的所有 NULL 值?的主要内容,如果未能解决你的问题,请参考以下文章
将我的 Access 表导出到 Excel,但将列中的不同值拆分到不同的工作表中