在sql server中的COUNT内过滤

时间:2011-03-25 15:27:15

标签: sql-server

  

可能重复:
  SQL Equivalent of COUNTIF()

我可以在COUNT本身中加入某种过滤机制,我不想在查询的WHERE或JOIN中使用它(因为它是大型查询的一部分,其中还有其他列,我不想得到受到哪里和加入条件的影响)。

例如,我可以在SUM

中使用案例
SUM(CASE WHEN work_status IN ('V','L') THEN shift_total_hours ELSE 0 END),

我是否也可以在COUNT中执行此类操作,以便我只计算特定行

类似的东西:

COUNT(CASE WHEN work_status IN ('V','L') THEN <should come in count> ELSE <exclude from count> END)
非常感谢。

2 个答案:

答案 0 :(得分:17)

你可以使用

COUNT(CASE WHEN work_status IN ('V','L') THEN 1 END)

对于与指定条件不匹配的行,CASE表达式返回NULLCOUNT仅计算NOT NULL

答案 1 :(得分:5)

这应该做你想要的:

SUM(CASE WHEN work_status IN ('V','L') THEN 1 ELSE 0 END)

虽然它使用的是SUM聚合函数,但它实际上是一个条件计数,因为对于每一行,你要在总和中加1或0.