计算表中具有1个或多个缺失值的行

时间:2015-09-18 11:51:33

标签: sql sql-server

请问您如何查找表中包含1个或更多缺失值的行数?缺少的值在我的表中由question marks = '?'表示。该表格为15 columns and ~50k rows。当我对某些列运行以下查询时,我可以收到一些结果:

SELECT 
    COUNT(*) 
FROM table_name 
WHERE column_name ='?'

但是我还有一些专栏给我带来了结果:"Error converting data type varchar to float"

我希望能够找到表中具有1个或多个缺失值的行数,使用1个查询/不为每列单独运行。

提前感谢您的支持!

3 个答案:

答案 0 :(得分:0)

这适用于任何专栏:

select count(*)
from table_name
where column_name is null or cast(column_name as varchar(255)) = '?';

答案 1 :(得分:0)

Select Count(*)
From   mySchema.myTable
Where  Cast(Col1 As NVarChar(128)) +
       Cast(Col2 As NVarChar(128)) +
       Cast(Coln As NVarChar(128)) Like '%?%'

丑陋且您可能需要相应地修改演员,但应该这样做。

答案 2 :(得分:0)

尝试以下查询: 只需设置表名即可获得所有列 你也可以像''一样给value_to_match在你的情况下或任何其他你想要的。

DECLARE @table_name nvarchar(max) = 'table_name'
DECLARE @value_to_match nvarchar(max) = '1'
DECLARE @query nvarchar(max) = ''
DECLARE @Condition nvarchar(max) = ' OR ' -- 1 OR when you want to count row if any column has that value -- 2 when you want all all columns to have same value

SELECT @query = @query + ' cast(' + COLUMN_NAME + ' as nvarchar(500)) = ''' + @value_to_match + '''' + @Condition FROM informatioN_schema.columns WHERE table_name = @table_name
if @@rowcount = 0
BEGIN
    SELECT 'Table doesn''t Exists'
    RETURN
END
SELECT @query = LEFT(@query,LEN(@query)-3)
PRINT ('select count(9) FROM ' + @table_name + ' WHERE ' + @query)
EXEC ('select count(9) FROM ' + @table_name + ' WHERE ' + @query)