/ / count valores com yes e não na instrução sql - sql, sqlite, funções agregadas

contagem de valores com sim e não na instrução sql - sql, sqlite, aggregate-functions

Eu tenho uma tabela com dados como este:

 USER  NAME     Timestamp               EXECUTED    CLOSED
1 user1 JOHN DOE 2015-11-23 12:50:45         Yes       Yes
2 user1 JOHN DOE 2015-11-23 12:52:35         Yes       Yes
3 user1 JOHN DOE 2015-11-23 12:53:52         Yes       Yes
4 user1 JOHN DOE 2015-11-23 12:54:59         Yes       Yes
5 user1 JOHN DOE 2015-11-23 12:56:04         Yes       Yes
6 user1 JOHN DOE 2015-11-23 18:09:37         Yes       No
7 user1 JOHN DOE 2015-11-23 18:15:46         Yes       Yes
8 user1 JOHN DOE 2015-11-23 18:17:02         Yes       Yes

E eu quero preparar um relatório como este:

USER   NAME      EXECUTED  CLOSED  NOTCLOSED
user1  JOHN DOE    8         7         1

Eu tentei com algo assim:

SELECT USER, NAME, Timestamp, count(EXECUTED), count(CLOSED)
FROM table
WHERE Timestamp LIKE "2015-11-23%"
AND EXECUTED = "Yes"
AND CLOSED = "Yes"

Mas o resultado neste caso sempre mostra:

EXECUTED    CLOSED
8           8

Quando tenho 1 registro com Fechado = Não. Sei que, quando conto as colunas EXECUTED e CLOSED, não posso avaliar adequadamente com WHERE = YES / NO porque o tipo de dados é alterado para número inteiro, mas não consigo encontrar uma solução adequada.

Outra coisa: como eu posso mostrar o valor adequado para a coluna "NO CLOSE"? (diferença entre EXECUTED e CLOSED)

Respostas:

2 para resposta № 1
select user, name,
sum(case when executed = "Yes" then 1 else 0 end) as executed,
sum(case when closed = "Yes" then 1 else 0 end) as closed,
sum(case when executed = "Yes" and closed = "No" then 1 else 0 end) as notclosed
from user
group by user, name

-1 para resposta № 2

Algo como isso deve funcionar:

;WITH counts AS (
SELECT USER
,NAME
,Timestamp
,SUM(CASE WHEN EXECUTED = "YES" THEN 1 ELSE 0 END) AS NumExecuted
,SUM(CASE WHEN CLOSED = "YES" THEN 1 ELSE 0 END) AS NumClosed
FROM table
WHERE Timestamp LIKE "2015-11-23%"
)
SELECT USER
,NAME
,Timestamp
,NumExecuted
,NumClosed
,NumExecuted - NumClosed AS NumOpen
FROM counts