2011-07-25 55 views
0

我创建了一条SQL语句,该语句应该返回所有销售员接收的约会数。我使用3个表格,Contract, SalesmenAppointment,我需要显示每个销售员收到多少个约会。在复杂的SELECT FULL JOIN语句中缺少记录

我的问题是,尽管我使用完全加入,但结果并未显示没有收到任何约会的人。我发现有一个关于约束的问题。

我看了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 

感谢您的帮助,

安特诺尔

回答

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