tSQL来计算组中的出现次数

时间:2017-05-26 18:04:30

标签: sql-server tsql

对于包含2列的表:

groupA  jobA-1
groupA  jobA-2
groupA  jobA-3
groupB  jobB-1
groupB  jobB-1
groupB  jobB-1

我需要查询它并获取组内每个作业的出现次数。

我正在寻找的结果是:

groupA  jobA-1  1
groupA  jobA-2  1
groupA  jobA-3  1
groupB  jobB-1  3
groupB  jobB-1  3
groupB  jobB-1  3

我对tSQL很满意,无法弄清楚如何做到这一点。

编辑:添加了一列(节点编号) 我可以扩展这个问题,询问是否有办法在组内标记第一次出现的作业?结果将是:

Group    Job    NodeNumber Occurrences  FirstOccurance
groupA  jobA-1  2          1            1
groupA  jobA-2  3          1            1
groupA  jobA-3  4          1            1
groupB  jobB-1  7          3            1
groupB  jobB-1  8          3            NULL
groupB  jobB-1  9          3            NULL

2 个答案:

答案 0 :(得分:1)

使用operator<<(myClass); 聚合窗口函数over()

count()

更新问题:

select grp, job, count(*) over (partition by grp, job) as cnt
from t

rextester演示:http://rextester.com/SNUVMD94771

返回:

select 
    grp
  , job
  , NodeNumber
  , count(*) over (partition by grp, job) as Occurrences
  , case when row_number() over (partition by grp, job order by (select 1)) = 1 
      then 1 
      else null 
      end as FirstOccurance
from t

答案 1 :(得分:0)

您可以使用窗口COUNT(*)

执行此操作
Select  Col1, Col2, 
        Count(*) Over (Partition By Col1, Col2) As Col3
From    YourTable