You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server月度数据查询:如何高效统计值大于0的列数?

解决SQL Server中统计多列大于0的列数问题

针对你需要统计每行Jan、Feb、Mar列中值大于0的数量的需求,不用写一堆嵌套的CASE判断,有更简洁高效的实现方式:

方法1:使用IIF函数累加

SQL Server 2012及以上版本支持IIF函数,它可根据条件返回1或0,直接将这些结果相加就能得到计数:

SELECT 
    P.January AS 'Jan',
    P.February AS 'Feb',
    P.March AS 'Mar',
    IIF(P.January > 0, 1, 0) + 
    IIF(P.February > 0, 1, 0) + 
    IIF(P.March > 0, 1, 0) AS 'Count'
FROM 你的表名 P;

方法2:使用CASE表达式累加

如果是SQL Server 2012之前的版本,用CASE表达式同样能实现累加,逻辑和上述一致:

SELECT 
    P.January AS 'Jan',
    P.February AS 'Feb',
    P.March AS 'Mar',
    CASE WHEN P.January > 0 THEN 1 ELSE 0 END + 
    CASE WHEN P.February > 0 THEN 1 ELSE 0 END + 
    CASE WHEN P.March > 0 THEN 1 ELSE 0 END AS 'Count'
FROM 你的表名 P;

这两种方式的核心思路是:对每一列单独判断,满足条件(大于0)就返回1,否则返回0,最后将这些数值相加,得到的就是该行中符合条件的列的总数。相比你之前枚举所有组合的CASE写法,不仅代码简洁,扩展性也更强——后续新增月份列时,只需在累加部分多加一行判断即可,无需修改大量WHEN条件。

另外注意:你原代码里把Count的值写成了字符串(比如'3'),上面的方案返回的是数值类型,更符合计数逻辑;如果确实需要字符串类型,可使用CAST或CONVERT转换结果。

内容的提问来源于stack exchange,提问作者Mohan Wijesena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:28:06