在复杂的SELECT FULL JOIN语句中缺少记录

时间:2011-07-25 00:37:56

标签: sql-server-2008 select join

我创建了一个SQL语句,该语句应返回所有销售人员收到的约会数。我使用3个表Contract, SalesmenAppointment,我需要显示每个销售人员收到了多少个约会。

我的问题是,虽然我使用完全加入,但结果并未显示未收到任何约会的人。我发现约束存在问题。

我看了一下Except,Intercept和Union选项,但没有一个可以解决我的问题。我可以使用哪种其他方式来获得有或没有收到某些约会的代表的完整列表?

我使用的语句有一个例子:

SELECT C.RepID, COUNT(A.AppID) AS AppAttrib, C.AppointmentPurchased, S.Name, S.FirstName
FROM Repartition.dbo.Contract C 
FULL JOIN Repartition.DBO.Appointment A
ON C.RepID = A.RepID
LEFT JOIN Repartition.DBO.Salesmen S
ON S.RepID = C.RepID
GROUP BY C.RepID, V.Nom, S.Name, S.FirstName

感谢您的帮助,

安特诺尔

1 个答案:

答案 0 :(得分:0)

我不知道你的表格结构,我只是在这里猜测 - 但我认为你的查询从错误的地方开始 - 你应该从Salesmen表开始,然后从那里开始。所以基本上,从Salesmen表中选择您需要的那些列,然后根据需要加入其他表。

这样的事情:

SELECT 
     s.RepID, S.Name, S.FirstName, 
     COUNT(A.AppID) AS AppAttrib, 
     C.AppointmentPurchased 
FROM  
     Repartition.dbo.Salesmen s
LEFT OUTER JOIN 
     Repartition.dbo.Contract c ON s.RepID = c.RepID
LEFT OUTER JOIN
     Repartition.dbo.Appointment a ON s.RepID = a.RepID
GROUP BY 
     s.RepID, s.Name, s.FirstName