在T-SQL中计算CASE WHEN和count(*)冲突

时间:2016-03-17 06:16:22

标签: sql tsql count case

尝试计算满足WHERE条件的所有记录,但也计算满足其他条件的那些记录(列为> 1的情况)

它看起来像这样:

SELECT 
  COUNT(*) AS BOOKINGS#, 
  Count(Case WHEN mNumber > 1 THEN 1 ELSE 0 END) AS  MEMBERBOOKINGS 

我的问题是两列都返回相同的结果(结果较小(案例))。

我确定这很容易,但我在这里挣扎。

1 个答案:

答案 0 :(得分:3)

当您对表达式使用COUNT时,它返回非空值的值,因为0不为空,它将被计数。

在文档中,这表示为:

  

COUNT(ALL表达式)计算组中每行的表达式   返回非空值的数量。

(ALL是默认选项)。

解决方案是将case表达式更改为:

COUNT(CASE WHEN mNumber > 1 THEN 1 ELSE NULL END)
-- the else branch is redundant and could be removed, but I wanted to be explicit here.

或改为使用sum

SUM(CASE WHEN mNumber > 1 THEN 1 ELSE 0 END)