首页 > 解决方案 > 计算一行中空值的数量以除以(未知)列数

问题描述

我正在使用 SQL Server 14,我需要计算一行中空值的数量以创建一个新列,其中将存储每行的“完整性百分比”。例如,如果 10 列中有 9 列包含给定行的值,则该行的 % 将为 90%。

我知道这可以通过许多Case表达式来完成,但问题是,这些数据将用于实时仪表板,完成后将不受我的监督。

我希望每次运行函数(或过程?不确定在这种情况下使用什么)时都计算这个百分比,并且需要知道我的表中存在的列数以便计算空值行,然后除以列数以找到“完整性百分比”。

任何帮助是极大的赞赏!

谢谢

标签: sqlsql-servercountsql-server-2014unpivot

解决方案


一种方法用于cross apply将列转为行并计算非空值的比率。

假设你的表有列col1to col4,你可以这样写:

select t.*, x.*
from mytable t
cross apply (
    select avg(case when col is not null then 1.0 else 0 end) completeness_ratio
    from (values (col1), (col2), (col3), (col4)) x(col)
) x

推荐阅读