问题描述
我很困惑如何在count
上不使用group by
的情况下获得join
我知道我可以使用group by
获得所需的结果,但是表联接很长,并且带有case语句的选定标题很多,所以我希望避免这种情况
我敢肯定,在使用partition over
之前已经完成了此操作,但是找不到在联接上使用它的好例子。也许不可能!?
我尝试过
select
p.FirstName,p.Surname,count(pr.RelativePersonId) over (partition by pr.RelativePersonId) as [RelativesOnRecord]
from People p
left join PersonRelatives pr
on p.PersonId = pr.PersonId
对于我的桌子:
人
PersonId | FirstName | Surname
1 Jim Bo
2 Harry Bo
3 Strong Bo
PersonRelatives
Id | PersonId | RelativePersonId
1 1 2
2 1 3
我要去哪里
PersonId | FirstName | Surname | RelativesOnRecord
1 Jim Bo 2
我也尝试过加入SELECT TOP 1
,但这只给了我一个结果,因此很重要。如果没有group by
,这是否有可能?
解决方法
似乎您按错误的列进行了分区-您想获取People
中每个人的亲属数量,对吗?使用
count(pr.RelativePersonId) over (partition by pr.PersonId) as [RelativesOnRecord]
,
根据您的示例,您想要进行汇总:
select p.PersonId,p.FirstName,p.Surname,count(*) as [RelativesOnRecord]
from People p join
PersonRelatives pr
on p.PersonId = pr.PersonId
group by p.PersonId,p.Surname;
您可以使用apply
或相关子查询,但是窗口函数在这里似乎不合适。