2017-02-23 13 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 различных таблиц необходимо объединить все таблицы Employee мудр, также необходимо модуль имя, для которого назначен руководитель модуля.

Ниже запрос я пытался до сих пор

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' и 'ApproachMatrix AM', и ваши условия JOIN становятся много clearer: 'на 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.

+0

ExpenseMatrix не имеет модуля – Anil

+0

u может добавить фиктивный столбец Расход в качестве модуля ... –

+0

Исправьте свой запрос, пожалуйста, концепция хорошая, проголосовали за ваш ответ – Anil

Смежные вопросы