2011-09-19 40 views
2

因此,在过去的几天中,我一直试图解决这个问题,但未取得成功:我有一张表,用于跟踪人们的参与(由它们独特的PartIpantId标识)到一些事件(由它们唯一的EventId标识)。带条件的SQL查询 - 为每个ID计数新值并返回值

我想编写一个SQL查询(我使用MS Access 2010),它为每个事件返回返回参与者的数量(即已经参与另一个具有较低EventId的事件)的数量,新参与者(首次出现时,是否按EventId排序)以及该事件的参与者总数?

如实例:

ParticipantId | EventId 
1    1 
1    3 
1    4 
2    3 
2    4 
3    5 

还会送:

EventId | New | Returning | Total 
1   1  0   1 
3   1  1   2 
4   0  2   2 
5   1  0   1 

这甚至可能开始?任何想法如何我可以做到这一点?

非常感谢!

回答

1

您可以使用子查询来确定用户的第一个事件。然后,进入iif允许你只计算第一个事件为New列:

select e.eventid 
,  sum(iif(e.eventid = p.FirstEvent,1,0)) as [New] 
,  sum(iif(e.eventid <> p.FirstEvent,1,0)) as Returning 
,  count(p.participantid) as Total 
from (
     select participantid 
     ,  min(eventid) as FirstEvent 
     from Table1 
     group by 
       participantid 
     ) as p 
left join 
     Table1 e 
on  p.participantid = e.participantid 
group by 
     e.eventid 
+0

非常感谢你,这确实完美的伎俩! 作为Access的新手,我可能会使用更简单的查询来执行代码计数,但您的解决方案更加优雅高效! – Federico