问题描述
每条记录有100个字段,只有几个字段具有值,许多字段为NULL。如果我要显示具有非NULL值的字段的记录,该怎么办?
示例:
-
表1具有100个字段,表中的一条记录具有5个具有非NULL值,95个NULL值的字段。我想显示该记录。
-
另一个具有100个字段NULL的记录,我不想显示该记录。
解决方法
您想要记录并非所有列都是null
的地方。您将需要枚举列名称。最简单的解决方案是冗长的where
子句,例如:
select *
from mytable
where col1 is not null or col2 is not null or ... or colN is not null;
另一种方法是横向连接:
select t.*
from mytable
cross apply (
select count(col) cnt
from (values (col1),(col2),... (colN)) as x(col)
) x
where x.cnt > 0
请注意,第二种解决方案要求所有列都具有相同的数据类型-否则,可能需要进行其他强制转换。