SQL“ COUNT”个可能的值

时间:2018-10-01 16:59:42

标签: sql sql-server count

我有一个T-SQL查询,该查询使用多个联接来产生所需的结果。在结果输出中,有多个具有相同“名称”值的记录,以及一个标题为“事件”的列,该列可以具有五个事件之一。因此,每个“名称”可以具有多个与之关联的“事件”。

我想做的是计算每个“名称”的“事件”的发生。这是当前产生的输出示例,没有计数:

Name         | Event
-------------+--------------
John Smith   | Decline
John Smith   | Decline
April Baker  | Accept
John Smith   | No Response
April Baker  | Decline
John Smith   | Accept

我试图产生的结果是为每个唯一的“名称”显示一个记录/行,并带有每个“事件”的计数。使用上面的示例将是:

Name        | Accept | Decline | No Response
------------+--------+---------+--------------
John Smith  |    1   |    2    |      1
April Baker |    1   |    1    |      0

或者,如果不可能,那么可能是这样的:

Name       | Event       | Count
-----------+-------------+--------
John Smith | Accept      |   1
John Smith | Decline     |   2
John Smith | No Response |   1
etc etc 

1 个答案:

答案 0 :(得分:3)

您可以使用subquerycte进行有条件的聚合:

select name, 
       sum(case when event = 'Accept' then 1 else 0 end) as Accept,
       sum(case when event = 'Decline ' then 1 else 0 end) as Decline ,
       sum(case when event = 'No Response' then 1 else 0 end) as [No Response]
from ( <query> ) t
group by name;

如果您想要第二个结果,那么group bycount()就足够了:

select name, Event, count(*)     
from ( <query> ) t
group by name, Event;