SUM(CASE WHEN column1 = 'value1' THEN 1 ELSE 0 END),
SUM(CASE WHEN column2 = 'value2' THEN 1 ELSE 0 END)..
Não sei por que estou achando difícil entender o que exatamente está acontecendo na declaração acima e o que exatamente 'Then 1 else 0' está fazendo aqui.
Se
column1
contiver o valorvalue1
, aCASE
expressão retornará 1 eSUM()
adicionará 1 para essa linha. Caso contrário, aCASE
expressão retornará 0 e adicionará 0 para essa linha. Esta é uma maneira de contar quantas linhas têmvalue1
emcolumn1
, mas existem outras maneiras de fazer isso também, por exemplo, em 2012+:Em versões anteriores:
(Você não precisa do
ELSE
aqui porque, ao contrárioSUM
de ,COUNT
ignoraNULL
.)E atualizei o valor
1
para ser uma string para demonstrar que isso não tem nada a ver com boolean.Isso é equivalente a um COUNT IF. Algumas pessoas usam isso para fazer unpivot do pobre.
O SQL avalia primeiro a instrução case, que retornará 0 ou 1. Em seguida, a operação SUM soma os valores.
Você pode tornar a instrução CASE tão complexa quanto precisar, mesmo procurando dados em outras tabelas.