Qual é a diferença entre COUNT(CASE WHEN [Column A] = ____ THEN 1 END
e COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END
?
Eu tenho usado o primeiro e não vi a diferença até agora; qual é o motivo da adição de ELSE 0
- existem situações em que o SQL Server contará incorretamente?
sql-server
sql-server-2008
coburne
fonte
fonte
Respostas:
Simplesmente, no primeiro caso, você está contando 1s e NULLs. (NULL é retornado se nenhuma das condições na instrução CASE corresponder e não houver cláusula ELSE.) NULLs não são contados. No segundo caso, 1 e 0. Os zeros podem ser contados.
Exemplo rápido:
Resultado:
fonte
Se você não especificar a instrução else part to case, ela retornará NULL por padrão e, no seu caso, isso é bom, porque count contará os valores que não são NULL. Se você retornar qualquer outra coisa do caso, não importa se é 1, 0 ou 2, sempre será contado como 1.
Se você usasse soma em vez de contagem, retornaria 1 ou 0.
fonte