如何计算Access 2010表中所有列中的所有NULL值?

时间:2012-05-11 16:43:18

标签: ms-access ms-access-2010

我需要能够计算Access 2010表的所有列中的所有NULLS。具体来说,我的意思是30列(字段)中有大量带有部分数据的记录。

我想在整个表格中计算出有多少是空的。

我在这个网站上读到了一篇题为“如何计算表中的所有NULL值”的文章,但是这些文章引用了SQL,而且,我很遗憾地承认对我来说过于复杂。

任何人都有任何进一步的线索?

:)

3 个答案:

答案 0 :(得分:4)

对于单个字段,您可以使用简单查询。

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

如果这些建议都不令人满意,请修改您的问题,以帮助我们更好地了解您的需求。

答案 1 :(得分:1)

没有简单的方法可以在所有列中执行此类计数"如果您事先不知道列名,则表格为。

如果你想这样做,你必须编写一个程序来阅读"元数据"对于数据库,从该数据中提取列和表的列表,为每个列构建一个单独的SQL语句,然后执行该语句并将返回的数字添加到运行的NULL值中。

这听起来像你可能会考虑追求的东西吗?如果是这样,您应该搜索获取MS Access数据库中的表列表并获取Access数据库中表的列的列表的解决方案,然后将该信息与您有关计数NULL的问题的信息相结合在专栏中。

答案 2 :(得分:0)

计算所有列的表中的空值:

{{1}}