计算一行中空值的数量以除以(未知)列数
Posted
技术标签:
【中文标题】计算一行中空值的数量以除以(未知)列数【英文标题】:Counting number of null values in a row to divide by (unknown) number of columns 【发布时间】:2020-09-11 00:37:44 【问题描述】:我正在使用 SQL Server 14,我需要计算一行中空值的数量以创建一个新列,其中将存储每行的“完整性百分比”。例如,如果 10 列中有 9 列包含给定行的值,则该行的 % 将为 90%。
我知道这可以通过多个 Case
表达式来完成,但问题是,这些数据将用于实时仪表板,完成后将不受我的监督。
我希望每次运行函数(或过程?不确定在这种情况下使用什么)时都计算这个百分比,并且需要知道我的表中存在的列数才能计算 null一行中的值,然后除以列数以找到“完整性百分比”。
非常感谢任何帮助!
谢谢
【问题讨论】:
样本数据和预期结果以及您的尝试将会澄清。 【参考方案1】:一种方法使用cross apply
将列取消透视到行并计算非空值的比率。
假设您的表有列col1
到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
【讨论】:
感谢您的回答。我喜欢你的方法,但今天我知道我的表中有多少列,但我可能不知道明天有多少列。我的意思是可能会在表格中添加一个额外的列,我想为此做准备。仍然不确定是否有办法为此做好准备。 @GuillermoGarcia 您可能必须使用 [Dynamic SQL][1] 并利用 [DMV][2] 获取所有列的当前列表,如果此答案适合您的需要,那么我怀疑它可以转换为使用动态 SQL 吗? [1]:mssqltips.com/sqlservertip/1160/… [2]:***.com/questions/1054984/…以上是关于计算一行中空值的数量以除以(未知)列数的主要内容,如果未能解决你的问题,请参考以下文章