MSSQL中如何判断分组后字段是否为空并返回Bit类型值
在MSSQL中实现分组字段全为Null的Bit类型判断
完全可以实现,推荐两种简洁高效的写法:
方法一:利用COUNT函数特性
COUNT(列名)会自动忽略Null值,因此如果分组内该字段全为Null,COUNT的结果会是0。结合CASE和CAST转换为Bit类型:
SELECT grouping_value, CAST(CASE WHEN COUNT(some_string_column) = 0 THEN 1 ELSE 0 END AS BIT) AS IsAllNull FROM [table] GROUP BY grouping_value
逻辑说明
COUNT(some_string_column):统计分组内some_string_column非Null的行数- 若结果为0,说明分组内该字段全是Null,返回Bit类型的
1(True);否则返回0(False)
方法二:通过MAX标记非Null行
先标记每行是否为非Null,再取分组内的最大值:
SELECT grouping_value, CAST(CASE WHEN MAX(CASE WHEN some_string_column IS NOT NULL THEN 1 ELSE 0 END) = 0 THEN 1 ELSE 0 END AS BIT) AS IsAllNull FROM [table] GROUP BY grouping_value
逻辑说明
- 内层CASE:将非Null行标记为1,Null行标记为0
- MAX取分组内的最大值,若最大值为0,说明全是Null行,返回1;否则返回0
两种方法中,方法一的执行效率更高,推荐优先使用。
内容的提问来源于stack exchange,提问作者Wojciech Szabowicz
相关产品推荐
相关产品推荐

