如何计算SQL Server 2012中的行?

时间:2015-08-14 20:58:26

标签: sql sql-server

我试图找出一个人(id = A3)是否在一个特定年份(2013年)至少五个月或更长时间内在一个项目中持续活跃。任何建议将不胜感激。我的数据如下所示:

enter image description here

1 个答案:

答案 0 :(得分:2)

您只需使用group by和条件表达式:

select id,
       (case when count(ActiveMonthYear) >= 5 then 'YES!' else 'NAW' end)
from table t
where ListOfTheMonths between '201301' and '201312'
group by id;

编辑:

我认为“持续”并不仅仅意味着任何五个月。为此,有各种方式。我喜欢行号方法的区别

select distinct id
from (select t.*,
             (row_number() over (partition by id order by ListOfTheMonths) -
              count(ActiveMonthYear) over (partition by id order by ListOfTheMonths)
             ) as grp
      from table t
      where ListOfTheMonths between '201301' and '201312'
     ) t
where ActiveMonthYear is not null
group by id, grp
having count(*) >= 5;

对于连续活动月份的组,子查询的差异是不变的。然后将其用于分组。结果是符合此条件的所有ID的列表。您可以为特定ID添加where(在子查询中执行此操作)。

顺便说一句,这是使用select distinctgroup by编写的。这是两种适当一起使用的罕见情况之一。单个id可以在同一年有两个为期五个月的期间。没有理由在结果集中包含该人两次。