首页 > 解决方案 > 多列中零值的 SQL COUNT

问题描述

我正在计算基于 ID 的一系列列中出现了多少个零。

示例表:

ID     hour1      hour2      hour3 
 1     2          10         0
 2     0          0          0
 3     0          24         0

我认为它看起来像这样,但显然它不起作用

SELECT ID, COUNT(CASE WHEN(  
FROM (VALUES (hour1) , (hour2) , (hour3)) 
AS VALUE (v)) AS ZERO_HOURS

期望的输出:

ID     ZERO_HOURS      
 1     1                  
 2     3                 
 3     2                

 

标签: sqlsql-servertsql

解决方案


一种方法是:

select t.id, h.num_zeros
from t cross apply
     (select count(*) as num_zeros
      from (values (hour1), (hour2), (hour3)) v(h)
      where h = 0
     ) h;

当然,case表达式也不是那么难:

select t.id,
       (case when hour1 = 0 then 1 else 0 end +
        case when hour2 = 0 then 1 else 0 end
        case when hour3 = 0 then 1 else 0 end
       ) as num_zeros

或者,如果没有负值或NULL值:

select t.id,
       (1 - sign(hour1)) + (1 - sign(hour2)) + (1 - sign(hour3)) as num_zeros
    

推荐阅读