我正在尝试加入3个表,以仅包括分配给一个以上任务的那些雇员。通过故障排除,我发现我的查询在添加第三张表之前一直有效。具体来说,直到我添加第三张表的列进行分组为止。 我需要添加第三个表,因为它包含了项目的开始和结束日期。
我已经待了好几天了。 我尝试用string_agg绕过group by中第三张表中的列,但是发现它在我们需要使用的程序中不受支持。 我尝试使用变量尝试不同的联接,不同的计数。我曾尝试以不同的组合方式加入表格,然后通过其他错误进行工作。我试图做嵌套的选择语句。
在这一点上,我已经数不清了。我开始使用笛卡尔积,现在发现我认为问题在于将第三个(项目)表分组。
CREATE VIEW Assignments AS
SELECT a.EmpIDNumber,
COUNT(*) AS Frequency,
e.FirstName,
e.LastName,
a.PositionOnProject,
P.AssignedToProject AS ProjectName,
P.ProjectBeginDate AS StartDate,
P.FinishOnProject AS End_Date
FROM Assignments a
INNER JOIN Employees e ON a.EmpIDNumber = e.EmpIDNumber
INNER JOIN Projects p ON a.projectID = p.ProjectID
GROUP BY e.FirstName,
E.LastName,
a.PositionOnProject,
a.EmpIDNumber,
p.AssignedToProject,
p.ProjectBeginDate,
p.FinishOnProject
HAVING COUNT(*) > 1;
按原样,我没有任何结果。只是空标题。 从选择和分组依据中删除第三个表(项目),我得到了预期的结果,显示了被分配到多个项目的那些雇员。
我知道我做错了事,很开放,渴望了解那是什么。任何帮助做到这一点表示赞赏。
答案 0 :(得分:1)
如果要为分配给多个项目的员工提供项目详细信息,请使用窗口功能:
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;
您的问题是您已将项目信息添加到GROUP BY
中。只有一个项目可以满足这些条件,因此HAVNG
子句最终将所有内容过滤掉。