2017-04-21 14 views
2

私は現在、MS SQL Server 2012で複雑なT-SQLクエリを処理しています。基本的には、ProjectIdとStaffVersionIdを保持するプロジェクトの基本リストを取得します私はそれが事実でないことを願っていますが、スタッフはプロジェクト全体を通して変化しています:P)。1つのテーブルで複数のT-SQLを結合する

CREATE TABLE #BasicProjects 
    (
     ProjectId INT 
     , StaffVersionId INT 
    ) 

次は私がプロジェクトのタイトルを取得するだけでなく、従業員のフルネームを取得するために、従業員表に結合するためにProjectData表に加入する必要があります。

SELECT [P].ProjectId 
    , [PD].Label AS Title 
    , [E].Lastname + '' '' + Firstname AS Manager 
    , [E].Lastname + '' '' + Firstname AS Contact 
    FROM #BasicProjects [P] 
    INNER JOIN [MySchema].[ProjectData] [PD] ON [PD].ProjectDataId = [P].ProjectDataId 
    INNER JOIN [MySchema].[Staff] [Y] ON [Y].StaffVersionId = [P].StaffVersionId AND [Y].StaffTypeId = 3 // Manager 
    INNER JOIN [MySchema].[Staff] [X] ON [X].StaffVersionId = [P].StaffVersionId AND [X].StaffTypeId = 2 // Contact 
    INNER JOIN [dbo].[Employee] [E] ON [E].EmployeeId = [Y].EmployeeId 
    INNER JOIN [dbo].[Employee] [E] ON [E].EmployeeId = [X].EmployeeId 

私はスタッフの従業員が2種類あるため、質問は一種難しいです。3 =マネージャ、2 =連絡先。私は私のクエリを実行すると

私はこのエラーを取得しています:

相関名「E」のFROM句内で複数回指定されています。

このエラーを解決する方法はありますか。または、このクエリを改善する方法についてのアドバイスもありますか?

ありがとうございます!

答えて

2

あなたは素敵なハ、

SELECT [P].ProjectId 
    , [PD].Label AS Title 
    , [YE].Lastname + ' ' + YE.Firstname AS Manager 
    , [XE].Lastname + ' ' + XE.Firstname AS Contact 
    FROM #BasicProjects [P] 
    INNER JOIN [MySchema].[ProjectData] [PD] ON [PD].ProjectDataId = [P].ProjectDataId 
    INNER JOIN [MySchema].[Staff] [Y] ON [Y].StaffVersionId = [P].StaffVersionId AND [Y].StaffTypeId = 3 // Manager 
    INNER JOIN [MySchema].[Staff] [X] ON [X].StaffVersionId = [P].StaffVersionId AND [X].StaffTypeId = 2 // Contact 
    INNER JOIN [dbo].[Employee] [YE] ON [YE].EmployeeId = [Y].EmployeeId 
    INNER JOIN [dbo].[Employee] [XE] ON [XE].EmployeeId = [X].EmployeeId 
+0

(あなたがStaffのためにやったように)それぞれに異なる別名が参加する必要があります!それは確かにそれです!本当にありがとう、素晴らしい週末を過ごす! – TimHorton

+0

@TimHorton助けて嬉しいです! – SqlZim

関連する問題