我有一个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
答案 0 :(得分:3)
您可以使用subquery
或cte
进行有条件的聚合:
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 by
与count()
就足够了:
select name, Event, count(*)
from ( <query> ) t
group by name, Event;