1

可能重复:
如何在 SQL 中计算一条记录中具有空值的所有字段?

我有五列的表:

姓名 DOB 电子邮件 电话 职位
abc null a@c.com null null
英国广播公司 null null null null

如何编写查询以便可以找到一行中的空列数?

(例如,第 1 行有 3 个空值,第 2 行有 4 个空值。)

我正在使用 SQL Server 2008。

4

2 回答 2

1

天真的方式:

SELECT CASE WHEN Name IS NULL THEN 1 ELSE 0 END +
    CASE WHEN DOB IS NULL THEN 1 ELSE 0 END +       
    CASE WHEN Email IS NULL THEN 1 ELSE 0 END +       
    CASE WHEN phone IS NULL THEN 1 ELSE 0 END +       
    CASE WHEN jobtitle IS NULL THEN 1 ELSE 0 END

但我不想写其中的 76 个。那么动态方式怎么样(未经测试,但沿着这些思路):

DECLARE @SQL NVARCHAR(4000);    
SET @SQL = 'SELECT theTable.ID, ' + 
    STUFF((SELECT '+ CASE WHEN ' + QUOTENAME(COLUMN_NAME) + 
        ' IS NULL THEN 1 ELSE 0 END' 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = 'theTable' FOR XML PATH('')) , 1 , 1 , '') 
    + ' FROM theTable';    
EXEC(@SQL);
于 2012-09-20T13:15:45.877 回答
-2

I think the only way is to specify each of your columns

select sum(case when item1 is null then 1 else 0 end
          +case when item2 is null then 1 else 0 end
          +case when item3 is null then 1 else 0 end
          +case when item4 is null then 1 else 0 end
          +case when item5 is null then 1 else 0 end
          +case when item6 is null then 1 else 0 end
          ) as grandtotalnulls
  from yourtable
于 2012-09-20T13:23:52.170 回答