我需要能够计算Access 2010表的所有列中的所有NULLS。具体来说,我的意思是30列(字段)中有大量带有部分数据的记录。
我想在整个表格中计算出有多少是空的。
我在这个网站上读到了一篇题为“如何计算表中的所有NULL值”的文章,但是这些文章引用了SQL,而且,我很遗憾地承认对我来说过于复杂。
任何人都有任何进一步的线索?
:)
答案 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}}