在sql server中的COUNT内过滤

Tin*_*tin 13 sql-server

可能重复:
COUNTIF的SQL等效项()

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

例如,我可以在SUM中使用case

SUM(CASE WHEN work_status IN ('V','L') THEN shift_total_hours ELSE 0 END),
Run Code Online (Sandbox Code Playgroud)

我也可以在COUNT中执行类似的操作,这样我就可以只计算特定的行数了

这样的事情:

COUNT(CASE WHEN work_status IN ('V','L') THEN <should come in count> ELSE <exclude from count> END)
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Mar*_*ith 20

你可以使用

COUNT(CASE WHEN work_status IN ('V','L') THEN 1 END)
Run Code Online (Sandbox Code Playgroud)

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

  • +1.换句话说,如果省略ELSE分支,则隐含"ELSE NULL". (3认同)

Gre*_*reg 6

这应该做你想要的:

SUM(CASE WHEN work_status IN ('V','L') THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)

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