计算具有特定条件的列

时间:2017-10-12 13:36:21

标签: 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

http://sqlfiddle.com/#!9/f73409/4

我希望这返回3

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

使用IN

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

请参阅Fiddle

答案 1 :(得分:0)

标准SQL具有以下特定功能:聚合后面的filter子句。

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

但是使用case有一个简单的解决方法:

COUNT(CASE WHEN <condition> THEN 1 END)

这是有效的,因为else null的隐含case条款以及count null不计算filter

有关{{1}}子句以及模仿方法的更多信息:http://modern-sql.com/feature/filter