Sql 使用特定条件对列进行计数

Sql 使用特定条件对列进行计数,sql,sql-server,count,Sql,Sql Server,Count,如何计算包含特定值的列,但将其作为总计 表数据: Code No 1 * 2 - 3 4 4 例如,如果我想计算有多少行有*和-和空间 我可以 Case when No = '*' Then COUNT(No) when No = '-' then count(No) when No = '' then count(No) else 0 end as 'Count' 但是这个返回4 我想把这个还给

如何计算包含特定值的列,但将其作为总计

表数据:

 Code      No
  1         *
  2         -
  3         4
  4         
例如,如果我想计算有多少行有*和-和空间

我可以

Case when No = '*'
Then COUNT(No)
when No = '-' then count(No)
when No = '' then count(No)
else 0 end as 'Count'
但是这个返回4

我想把这个还给你

任何帮助都将不胜感激

请在中使用

select Sum(Case when No IN ('*', '-', '') then 1 else 0 end) as Count
from Table1
请参阅

中的使用

select Sum(Case when No IN ('*', '-', '') then 1 else 0 end) as Count
from Table1

请参阅。

标准SQL有一个特殊的特性:聚合后面的
过滤器
子句

不幸的是,它没有得到广泛的支持(主要是PostgreSQL)

使用
案例
有一个简单的解决方法,但是:

COUNT(CASE WHEN <condition> THEN 1 END)
计数(1结束时的情况)
这是因为
case
的隐含
else null
子句起作用,并且
count
不计算
null


关于
filter
子句和模拟它的方法的更多信息:

标准SQL有一个特殊的特性:聚合后面的
filter
子句

不幸的是,它没有得到广泛的支持(主要是PostgreSQL)

使用
案例
有一个简单的解决方法,但是:

COUNT(CASE WHEN <condition> THEN 1 END)
计数(1结束时的情况)
这是因为
case
的隐含
else null
子句起作用,并且
count
不计算
null

有关
filter
子句及其模拟方法的更多信息: