sql - 计算一行中空值的数量以除以(未知)列数
问题描述
我正在使用 SQL Server 14,我需要计算一行中空值的数量以创建一个新列,其中将存储每行的“完整性百分比”。例如,如果 10 列中有 9 列包含给定行的值,则该行的 % 将为 90%。
我知道这可以通过许多Case
表达式来完成,但问题是,这些数据将用于实时仪表板,完成后将不受我的监督。
我希望每次运行函数(或过程?不确定在这种情况下使用什么)时都计算这个百分比,并且需要知道我的表中存在的列数以便计算空值行,然后除以列数以找到“完整性百分比”。
任何帮助是极大的赞赏!
谢谢
解决方案
一种方法用于cross apply
将列转为行并计算非空值的比率。
假设你的表有列col1
to 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