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。