2011-09-19 57 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