Sql server 在sql server中筛选内部计数

Sql server 在sql server中筛选内部计数,sql-server,Sql Server,可能重复: 我可以在COUNT本身中加入某种过滤机制吗?我不想在查询的WHERE或join中使用这种机制(因为它是大型查询的一部分,其中还有其他列,我不想受WHERE和join条件的影响) 例如,我可以在SUM中使用case SUM(CASE WHEN work_status IN ('V','L') THEN shift_total_hours ELSE 0 END), 我也可以在COUNT中执行类似的操作,这样我就只能得到特定行的COUNT了吗 大概是这样的: COUNT(CASE WH

可能重复:

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

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

SUM(CASE WHEN work_status IN ('V','L') THEN shift_total_hours ELSE 0 END),
我也可以在COUNT中执行类似的操作,这样我就只能得到特定行的COUNT了吗

大概是这样的:

COUNT(CASE WHEN work_status IN ('V','L') THEN <should come in count> ELSE <exclude from count> END)
COUNT(工作状态为('V','L')然后结束时的情况)

非常感谢。

这应该可以满足您的要求:

SUM(CASE WHEN work_status IN ('V','L') THEN 1 ELSE 0 END)
尽管它使用的是SUM aggregate函数,但它实际上是一个条件计数,因为对于每一行,您将向SUM中添加1或0。

您只需使用

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

对于与指定条件不匹配的行,
CASE
表达式返回
NULL
COUNT
仅计数
非NULL

+1。换句话说,如果省略了ELSE分支,则暗示了
ELSE NULL
。但不适用于DISTINCT。