SQL内连接表匹配行数

时间:2018-02-02 08:43:08

标签: sql sql-server

我有像这样的SQL查询

 select fname,lname,Id from Employee e
 inner join Address a on e.Id=a.EmployeeId

我还希望包含在选择列表中的是,地址表中与employee表中的每一行匹配的行数。

例如。

如果员工使用FNAme mandar有两个地址行,那么在选择中我应该看到

Mandar J 1 2

我知道我可以用groupby做到这一点,但我在想它是否是理想的做法,只能得到匹配的行数。子查询可能对性能不利。

select fname,lname,Id,count(a.Id) from Employee e
inner join Address a on e.Id=a.EmployeeId
groupby a.EmployeeId 

然后我还必须包含fname,lname , Id in the groupby列表,这可能不干净。

1 个答案:

答案 0 :(得分:3)

使用COUNT作为分析函数:

SELECT
    e.fname,
    e.lname,
    e.Id,
    COUNT(a.EmployeeId) OVER (PARTITION BY e.Id) AS cnt
FROM Employee e
INNER JOIN Address a
    ON e.Id = a.EmployeeId

上述对COUNT的调用将返回每个员工分区的地址记录数。

编辑:我们应该计算a.EmployeeId,因为如果给定的员工碰巧没有地址,我们会期望零计数。