2012-06-26 18 views
0

我試圖將多個表連接在一起以構建報表。該報告列出了一個課程,對其進行了修訂,以及誰要求,制定並批准了修訂。加入多個表並從其中一個獲取多個屬性

根據要求,提出了批准,這些值是員工編號。我試圖加入我上面的Innerjoined表,使用Employee表,這樣我可以列出請求,制定和批准修訂的名稱(不僅僅是員工編號)。

這是我知道的是完全錯誤的。

SELECT * 
FROM Courses 
INNER JOIN CourseRevisions ON CourseRevisions.PELID = Courses.PELID 
INNER JOIN CourseGroups ON CourseGroups.CourseGroupID = Courses.CourseGroupID 
INNER JOIN [dbo].[OPG_Employees] ON OPG_Employees.EmployeeID = CourseRevisions.UpdatedBy 
AND OPG_Employees.EmployeeID = CourseRevisions.ApprovedBy 
AND OPG_Employees.EmployeeID = CourseRevisions.RequestedBy 

這隻能返回一個結果這恰好有上市的同一僱員的ID的所有3(請求,批准和更新)

我怎麼會得到它,所以我可以得到表結果每個人的個人僱員?

回答

1

您必須爲每個字段加入OPG_Employees表一次,即上例中爲3次。一個INNER JOIN爲它的UpdatedBy,一個INNER JOIN爲ApprovedBy,一個INNER JOIN爲RequestedBy。

事情是這樣:

SELECT * 
FROM Courses 
INNER JOIN CourseRevisions ON CourseRevisions.PELID = Courses.PELID 
INNER JOIN CourseGroups ON CourseGroups.CourseGroupID = Courses.CourseGroupID 
INNER JOIN [dbo].[OPG_Employees] empUpdatedBy ON empUpdatedBy.EmployeeID = CourseRevisions.UpdatedBy 
INNER JOIN [dbo].[OPG_Employees] empApprovedBy ON empApprovedBy.EmployeeID = CourseRevisions.ApprovedBy 
INNER JOIN [dbo].[OPG_Employees] empRequestedBy ON empRequestedBy.EmployeeID = CourseRevisions.RequestedBy 
+0

謝謝肖恩,你釘了它!您的解決方案很好 – KrispyK

1

你需要爲每個員工單獨加入被引用:

SELECT * 
FROM Courses INNER JOIN 
    CourseRevisions 
    ON CourseRevisions.PELID = Courses.PELID INNER JOIN 
    CourseGroups 
    ON CourseGroups.CourseGroupID = Courses.CourseGroupID INNER JOIN 
    [dbo].[OPG_Employees] UpdateEmp 
    ON UpdateEmp.EmployeeID = CourseRevisions.UpdatedBy INNER JOIN 
    [dbo].[OPG_Employees] ApprovedEmp 
    on OPG_ApprovedEmp.EmployeeID = CourseRevisions.ApprovedBy INNER JOIN 
    [dbo].[OPG_Employees] RequestedEmp 
    on RequestedEmp.EmployeeID = CourseRevisions.RequestedBy 

你原來的配方要求所有的三個ID是完全一樣的。