SQL Server中的Count(),Group by和Joins出错

时间:2017-01-13 16:43:39

标签: sql sql-server

当我分开陈述时结果非常不同......

SELECT Company.CompanyID,
Count(Projects2.CompanyID) as TotalProjects,
Count(Jobs2.CompanyID) as TotalJobs,
Count(Employees.CompanyID) as TotalEmployess
FROM Company JOIN
Projects2 ON Company.CompanyID = Projects2.CompanyID  
JOIN Company Employees ON Company.CompanyID = Employees.CompanyID 
JOIN Company Jobs2 ON Jobs2.CompanyID = Company.CompanyID
Group by Company.CompanyID

结果

enter image description here

为什么要重复这些值? 任何想法?

3 个答案:

答案 0 :(得分:0)

您的查询将加入公司表3次(在后面的实例中将其别名为Employees和Jobs2)。只是一个错字?

答案 1 :(得分:0)

你在每个列“TotalProjects”,“TotalJobs”和“TotalEmployees”中得到相同的值,因为你的JOIN(将来考虑使用INNER JOIN,因为它做同样的事情,但更清晰)生成的结果中,连接表中存在匹配值 - 因此您最终会得到每个结果的相同数量。

答案 2 :(得分:0)

我认为你在计算错误的ID。 projects2,jobs2和employees表的主键是什么?您的查询应该是这样的:

SELECT Company.CompanyID,
COUNT(DISTINCT Projects2.Primary_Key) as TotalProjects,
COUNT(DISTINCT Jobs2.Primary_Key) as TotalJobs,
COUNT(DISTINCT Employees.Primary_Key) as TotalEmployees
FROM Company
LEFT JOIN Projects2 ON Company.CompanyID = Projects2.CompanyID  
LEFT JOIN Employees ON Company.CompanyID = Employees.CompanyID 
LEFT JOIN Jobs2 ON Company.CompanyID = Jobs2.CompanyID 
GROUP BY Company.CompanyID

此外,使用LEFT连接而不仅仅是JOIN,您不需要继续重复公司。

您为每个表获得相同计数的原因是因为您的联接。假设项目表中有五个记录具有给定的公司ID,但在该表中只有三个记录具有该ID。将公司表加入项目表时,您将有五条记录。然后,当您加入作业表时,您的联合表将具有该公司ID的15(5 * 3)条记录,因为每个作业记录将加入到五个项目记录中的每一个。因此,您只想使用主键从每个表中选择不同的记录。