2017-02-23 19 views
0

我有三個表SQL Server:在4-5表連接不同結構

  • 員工
  • ApprovalMatrix
  • ExpenseMatrix

Employee包含:

ID CompanyId Name 
--------------------------------------- 
9 1   ABC 
10 1   XYZ 
11 1   WEW 

ApprovalMatrix包含:

ID  Module Employeeid EmployeeLeaderId 
-------------------------------------------- 
11  M1   9   11 
12  M1   10   11 
13  M2   9   11 
55  M3   10   11 
56  M2   10   11 

ExpenseMatrix包含:

ID Employeeid EmployeeLeaderId 
-------------------------------------------- 
11  10   9 
12  11   9 

預期結果:

Module EmployeeName EmployeeLeaderName 
-------------------------------------------- 
M1   ABC   WEW 
M1   XYX   WEW 
M2   ABC   WEW 
M3   XYZ   WEW 
M2   XYZ   WEW 
Expense  XYZ   ABC 
Expense  WEW   ABC 

喜歡我有4-5個不同的表需要合併所有表員工智慧,也需要模塊名稱爲哪個模塊領導者分配。

下面是我試圖到目前爲止

select 
    C.Module, A.Employeeid, B.Name 
from 
    Employee B 
join 
    ExpenseMatrix A on A.EmployeeLeaderId = B.Id 
join 
    ApprovalMatrix C on C.EmployeeLeaderId = B.Id 
where 
    B.EmpStatus = 1 and A.EmployeeId = 56 
+0

這裏有什麼問題,請你多解釋一下? – Anil

+1

注意:你應該使用**更有意義的表別名 - 只是A,B和C真的沒有幫助 - 使用'Employee E','ExpenseMatrix EM'和'ApprovalMatrix AM'並且你的JOIN條件變得很多更清楚:'對EM.EmployeeLeaderId = E.Id'等 –

+0

最後兩個記錄預計來自工會,而不是加入 – Horaciux

回答

2
select 
    A.Module, e1.name, e2.Name 
from 
    ApprovalMatrix AM 
inner join Employee E1 
    on AM.EmployeeId = E1.ID 
inner join Employee E2 
    on AM.EmployeeLeaderId = E2.ID 
union all 
select 'Expense', e1.name, e2.name 
From ExpenseMatrix EM 
inner join Employee E1 
    on EM.EmployeeId = E1.ID 
inner join Employee E2 
    on EM.EmployeeLeaderId = E2.ID 
+0

它給出了預期的結果,謝謝! – Nilesh

2

嗨嘗試下面的代碼查詢。

;with temp as 
(select Module , Employeeid , EmployeeLeaderId from ApprovalMatrix 
union all 
select 'Expence' as Module ,Employeeid , EmployeeLeaderId from ExpenseMatrix) 

select Module, b.Name as EmployeeName ,c.name as EmployeeLeaderName from temp a 
left join Employee b on a.EmployeeLeaderId =b.Id 
left join Employee c on a.EmployeeLeaderId =c.id 

注意在CTE塊中的union all中添加更多表。

+0

ExpenseMatrix沒有模塊 – Anil

+0

您可以添加虛擬列費用作爲模塊... –

+0

請更正您的查詢,概念是好的,投票你的答案 – Anil