SQL计数聚合问题,组合3个表

SQL计数聚合问题,组合3个表,sql,sql-server,count,Sql,Sql Server,Count,我正在尝试联接3个表,以仅包括分配给多个任务的员工。通过故障排除,我发现在添加第三个表之前,我的查询一直有效。具体来说,直到我将第三个表的列添加到GROUPBY。 我需要添加第三个表,因为它包括项目的开始和结束日期 这件事我已经做了好几天了。 我曾尝试使用string_agg绕过group by中第三个表中的列,但发现我们需要使用的程序不支持它。 我尝试了不同的连接,不同的计数,使用变量。我尝试过以不同的组合连接这些表,并随后处理了其他错误。我尝试过使用嵌套的select语句 在这一点上,我已经

我正在尝试联接3个表,以仅包括分配给多个任务的员工。通过故障排除,我发现在添加第三个表之前,我的查询一直有效。具体来说,直到我将第三个表的列添加到GROUPBY。 我需要添加第三个表,因为它包括项目的开始和结束日期

这件事我已经做了好几天了。 我曾尝试使用string_agg绕过group by中第三个表中的列,但发现我们需要使用的程序不支持它。 我尝试了不同的连接,不同的计数,使用变量。我尝试过以不同的组合连接这些表,并随后处理了其他错误。我尝试过使用嵌套的select语句

在这一点上,我已经数不清了。我从一个笛卡尔积开始,现在发现问题出在第三个(项目)表的分组上

照目前的情况,我没有得到任何结果。只是空标题。 从select和group by中删除第三个表(项目),我会得到预期的结果,显示分配给多个项目的员工


我知道我做错了什么,我很开放,渴望知道那是什么。在这方面的任何帮助都是非常感谢的

如果希望为分配给多个项目的员工提供项目详细信息,请使用窗口功能:

SELECT a.EmpIDNumber, a.Frequency,
       e.FirstName, e.LastName, a.PositionOnProject,
       P.AssignedToProject AS ProjectName,
       P.ProjectBeginDate AS StartDate,
       P.FinishOnProject AS End_Date
FROM (SELECT a.*, COUNT(*) OVER (PARTITION BY a.EmpIDNumber) as frequency
      FROM Assignments a
     ) a INNER JOIN
     Employees e
     ON a.EmpIDNumber = e.EmpIDNumber INNER JOIN
     Projects p
     ON a.projectID = p.ProjectID
WHERE frequency > 1;

您的问题是,您已经将项目信息添加到了
组BY
。只有一个项目将匹配这些条件,因此,
HAVNG
子句最终会过滤掉所有内容。

这里的问题是您对每个列进行分组,因此每个行集都是唯一的(因此不会返回任何结果)。在没有真正看到数据的情况下,我们能做的就是猜测。似乎您应该只是从
Employees
表中返回值,然后对这些值进行分组。@CouponCode我看到您使用
StartDate和End_Date
我认为这不是故意的,但请尽量保持不变:)这是我的初学者数据库类,非常感谢。虽然我花了几个小时来解决你在几分钟内帮我解决的问题,但我觉得我学到了很多!我从来没有听说过窗口函数,但我现在就要阅读它们的全部内容。我知道我不应该使用group by中的项目列,我只是不知道如何不使用。再次感谢。
SELECT a.EmpIDNumber, a.Frequency,
       e.FirstName, e.LastName, a.PositionOnProject,
       P.AssignedToProject AS ProjectName,
       P.ProjectBeginDate AS StartDate,
       P.FinishOnProject AS End_Date
FROM (SELECT a.*, COUNT(*) OVER (PARTITION BY a.EmpIDNumber) as frequency
      FROM Assignments a
     ) a INNER JOIN
     Employees e
     ON a.EmpIDNumber = e.EmpIDNumber INNER JOIN
     Projects p
     ON a.projectID = p.ProjectID
WHERE frequency > 1;