如何搜索多个字段并为所有字段计算空值?

时间:2017-11-03 17:42:57

标签: sql sql-server

是否有一种简单的方法可以计算表中所有字段中的空值,而无需编写40多个非常相似但略有不同的查询?我认为所有表格都有某种统计数据,这可能是最简单的方法,但我不确定。思绪,有人吗?谢谢!

BTW,我正在使用SQL Server 2008。

3 个答案:

答案 0 :(得分:1)

 SELECT COUNT( CASE WHEN field01 IS NULL THEN 1 END) +
        COUNT( CASE WHEN field02 IS NULL THEN 1 END) +
        ... 
        COUNT( CASE WHEN field40 IS NULL THEN 1 END) as total_nulls

答案 1 :(得分:1)

answer将返回一个表,其中包含指定表的每列的名称。 (@tab是您尝试计算NULL的表的名称。)

您可以循环遍历列名,计算每列中的NULL,并将结果添加到总运行计数中。

答案 2 :(得分:1)

不确定您是否认为这很简单,但这会在表格中按列总计NULL。

DECLARE @table sysname;
SET @table = 'MyTable'; --replace this with your table name
DECLARE @colname sysname;
DECLARE @sql NVARCHAR(MAX);

DECLARE COLS CURSOR FOR
SELECT c.name
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = @table;

SET @sql = 'SELECT ';

OPEN COLS;
FETCH NEXT FROM COLS INTO @colname;
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = @sql + 'COUNT(CASE WHEN ' + @colname + ' IS NULL THEN 1 END) AS ' + @colname + '_NULLS,'
    FETCH NEXT FROM COLS INTO @colname;
END;

CLOSE COLS;
DEALLOCATE COLS;

SET @sql = LEFT(@sql,LEN(@sql) - 1) --trim tailing ,
SET @sql = @sql + ' FROM ' + @table;

EXEC sp_executesql @sql;