带有条件的SQL查询 - 为每个ID计算新值和返回值

时间:2011-09-19 09:26:39

标签: sql ms-access

所以这就是过去几天我一直试图解决的问题,但是没有成功:我有一张表跟踪人们(由他们独特的PartcipantId确定)参与某些事件(由他们独特的EventId)。

我想写一个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 个答案:

答案 0 :(得分: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