2017-10-12 10 views
0

Comment puis-je compter les colonnes qui contiennent des valeurs particulières, mais en tant que grand total.Colonne de comptage avec condition spécifique

données de table

:

Code  No 
    1   * 
    2   - 
    3   4 
    4   

Si par exemple je voulais compter le nombre de lignes a * et - et dans l'espace

que je pouvais faire

Case when No = '*' 
Then COUNT(No) 
when No = '-' then count(No) 
when No = '' then count(No) 
else 0 end as 'Count' 

mais renvoie 4

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

je ne voudrais que cela revenir 3

Toute aide serait appréciée

Répondre

4

Utilisation IN:

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

Voir Fiddle.

0

Standard SQL a une caractéristique particulière pour cela: la clause filter qui suit les agrégats.

Malheureusement, il n'est pas très largement supporté (principalement PostgreSQL).

Il y a une solution facile à l'aide case cependant:

COUNT(CASE WHEN <condition> THEN 1 END) 

Cela fonctionne parce que la clause de caseelse null implicite et parce que count ne compte pas null.

En savoir plus sur la clause filter et les moyens de l'imiter: http://modern-sql.com/feature/filter