动态SQL查询以查找表所有列的缺失值计数

普罗米拉

我想编写一个动态sql查询,以查找表中每一列的缺失值计数。该表由40列组成,每列的遗漏计数很长,因此我们可以动态地做到这一点吗?我尝试按照下面的方法编写动态查询,但出现错误

必须声明标量变量“ @sql”

查询:

Declare @sql nvarchar(max)  
Declare @columnlist nvarchar(max)   
Declare @FieldName nvarchar(max)    

set @columnlist = 'Column 1,Column2 ,Column3 ,Column4 ,Column5 ,Column6 ,Column7 ,Column8 ,Column9 ,Column10 ,Column11 ,Column12,Column13'  

set @FieldName = 'Column 1,Column2 ,Column3 ,Column4 ,Column5 ,Column6 ,Column7 ,Column8 ,Column9 ,Column10 ,Column11 ,Column12,Column13'

set @sql = 'SELECT COUNT(*)-COUNT(' + @columnlist + ') as '+ @FieldName +'from table_name' 

exec (@sql)
沃尔夫冈·凯斯

试试这个:

DECLARE @sql nvarchar(max) = N'SELECT';
DECLARE @table_name nvarchar(256) = N'YourTableName'

SELECT @sql = @sql + ' COUNT(*)-COUNT(' + QUOTENAME(COLUMN_NAME) + ') as '+ QUOTENAME(COLUMN_NAME) + N','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = N'dbo'
  AND TABLE_NAME = @table_name

SET @sql = LEFT(@sql, LEN(@sql) - 1) + ' from ' + @table_name

EXEC (@sql)

添加

好吧,所以这是一个示例,说明如何对每列使用相似的方法来计算至少具有一个重复项的值的数量:

DECLARE @sql nvarchar(max) = N'WITH duplicates AS (SELECT';
DECLARE @table_name nvarchar(256) = N'YourTableName';

SELECT @sql = @sql 
  + N' CASE WHEN COUNT(' + QUOTENAME(COLUMN_NAME) 
  + N') OVER (PARTITION BY ' + QUOTENAME(COLUMN_NAME) 
  + N') > 1 THEN ' + QUOTENAME(COLUMN_NAME)  
  + N' END as '+ QUOTENAME(COLUMN_NAME) + N','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = N'dbo'
  AND TABLE_NAME = @table_name;

SET @sql = LEFT(@sql, LEN(@sql) - 1) + ' from ' + @table_name + ') SELECT';

SELECT @sql = @sql 
  + N' COUNT(DISTINCT ' + QUOTENAME(COLUMN_NAME) 
  + N') as '+ QUOTENAME(COLUMN_NAME) + N','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = N'dbo'
  AND TABLE_NAME = @table_name;

SET @sql = LEFT(@sql, LEN(@sql) - 1) + ' from duplicates';

EXEC (@sql);

您会看到它使用了2条SELECT语句,第一个创建了一个CTE,该CTE将所有没有重复的值替换为NULL:

CASE WHEN COUNT([C1]) OVER (PARTITION BY [C1]) > 1 THEN [C1] END as [C1]

第二个使用COUNT DISTINCT计数剩余的内容。这样,将不计算NULL值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL查询以计数所有表中的列

SQL查询-如何从表中选择计数所有值并显示所有计数及其ID?

如果组的所有值都缺失,则 SQL 填充列

SQL查询查找具有第二列的所有值的值

联接表以查找列中的缺失值

按特定列查找表中所有对的计数

SQL查询以查找两列中不同值的计数

Postgres SQL查询以从列中查找值的计数

获取在同一 SELECT SQL 查询中获得的列中所有类型值的计数

当且仅当联接表包含所有值列表时,SQL查询才能查找记录

动态查询以查找所有表oracle中的所有表DML活动

具有计数和联接的SQL查询中的动态列

如何根据sql server中的where条件获取表中所有列的值的不同计数?

Django查询以获取特定列的所有不同值的计数

Django查询以获取ArrayField列的所有不同值的计数

使用Python脚本在SQL查询中查找所有表

如何获取表中所有列的重复值计数

动态查询符合特定条件的所有SQL表

SQL:根据表B中的列值查找表A中没有表B中值的所有记录

查找非缺失列值不相同的所有行

SQL查询以查找分组值的所有组合

SQL查询以查找具有不同值的表中的数据

SQL查询仅在所有列值匹配时才更新表

SQL查询以获取访问表最后一行中所有列值的总和

在SQL表中查找所有两列重复项,其中第三列的较晚值大于较早的值

基于 2 列组合条件在表中插入缺失值的 T-SQL 查询

从表中查找缺失值

如何像 Pandas 中的值计数一样对 Microsoft SQL Server 中临时表中的所有列求和

SQL查询以查找所有相同user_id计数> 3的名称