对于包含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
答案 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