在 sql 语句中用 yes 和 not 计算值

count values with yes and not in sql statement

我有一个 table 数据如下:

 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

我想准备一份这样的报告:

USER   NAME      EXECUTED  CLOSED  NOTCLOSED
user1  JOHN DOE    8         7         1

我试过这样的东西:

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

但这种情况下的结果显示:

EXECUTED    CLOSED
8           8

当我有 1 条记录时 Closed = No. 我知道当我计算 EXECUTED 和 CLOSED 列时,我无法使用 WHERE = YES/NO 正确评估,因为数据类型更改为整数,但我找不到合适的解决方案。

其他:如何向 "NO CLOSE" 列显示正确的值? (EXECUTED 和 CLOSED 的区别)

像这样的东西应该可以工作:

;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
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