Quelle est la différence entre COUNT(CASE WHEN [Column A] = ____ THEN 1 END
et COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END
?
J'ai utilisé le premier et je n'ai pas vu la différence jusqu'à présent; quelle est la raison de l'ajout de ELSE 0
- y a-t-il des situations où SQL Server ne comptera pas correctement?
sql-server
sql-server-2008
coburne
la source
la source
Réponses:
Assez simplement dans le premier cas, vous comptez 1s et NULLs. (NULL est renvoyé si aucune des conditions de l'instruction CASE ne correspond et s'il n'y a pas de clause ELSE.) Les NULL ne sont pas comptés. Dans le second cas, 1 et 0. Les 0 peuvent être comptés.
Exemple rapide:
Production:
la source
Si vous ne spécifiez pas la partie else à l'instruction case, elle renverra alors NULL par défaut, et dans votre cas, c'est une bonne chose, car count comptera les valeurs non NULL. Si vous retournez autre chose de case, peu importe que ce soit 1, 0 ou 2, il sera toujours compté comme 1.
Si vous souhaitez utiliser la somme au lieu de compter, vous devez renvoyer 1 ou 0.
la source