SQL Join запрос, получение ManagerName - PullRequest
4 голосов
/ 12 марта 2010

У меня есть tblEmployeeProfile и tblPersonnel. tblPersonnel - это таблица HR, которая состоит из всех сотрудников компании; tblEmployeeProfile содержит подробную информацию о должности сотрудника.

tblPersonnel.PersonnelID
tblPersonnel.FirstName
tblPersonnel.MiddleName
tblPersonnel.LastName
tblPersonnel.PhoneNumber
tblPersonnel.Email

tblEmployeeProfile.EmployeeID
tblEmployeeProfile.ManagerID
tblEmployeeProfile.DepartmentID
tblEmployeeProfile.JobCategoryID
tblEmployeeProfile.SalaryID

Я хочу вернуть запись со следующими полями:

EmployeeID, FirstName, MiddleName, LastName, Email, ManagerFullName

where EmployeeID = @EmployeeID

*tblEmployeeProfile.ManagerID = tblPersonnel.PersonnelID*

Я не могу получить правильный запрос для получения ManagerFullName

Ответы [ 6 ]

2 голосов
/ 12 марта 2010

Не уверен, что то же самое для Tsql, но вам понадобятся два оператора соединения.Первое соединение - это таблица профиля сотрудника с вашей таблицей персонала.Второе - присоединить таблицу персонала к таблице профиля, чтобы получить имя менеджера.Может выглядеть примерно так:

FROM personnel p
JOIN employeeprofile prof
ON prof.employeeID = p.personnelID
LEFT OUTER JOIN personnel man
ON man.personnelID = prof.managerID

Единственная причина, по которой я сделал левое внешнее соединение с менеджером, заключается в том, что у пользователя может не быть назначенного менеджера.

2 голосов
/ 12 марта 2010

Вы можете попробовать следующее:

SELECT 
    e1.EmployeeID,
    e1.FirstName,
    e1.MiddleName,
    e1.LastName,
    e1.Email,
    e2.FirstName + ' ' + e2.LastName AS ManagerFullName
FROM
    tblPersonnel e1
INNER JOIN
    tblEmployeeProfile ep ON (ep.EmployeeID = e1.PersonnelID)
INNER JOIN
    tblPersonnel e2 ON (e2.PersonnelID = ep.ManagerID)
WHERE 
    e1.EmployeeID = @EmployeeID
1 голос
/ 12 марта 2010
SELECT
employee.PersonnelID, employee.FirstName, employee.MiddleName, employee.LastName, employee.Email, manager.FirstName + ' ' + manager.Surname
FROM
tblPersonnel AS employee
INNER JOIN tblEmployeeProfile ON employee.PersonnelID = tblEmployeeProfile.EmployeeID
INNER JOIN tblPersonnel AS manager ON tblEmployeeProfile.ManagerID = manager.PersonnelID
WHERE
employee.PersonnelID = @EmployeeID
0 голосов
/ 12 марта 2010

Вы пытаетесь сделать что-то подобное?

Select
    EmployeeID
    ,empTable.FirstName
    ,empTable.MiddleName
    ,empTable.LastName
    ,empTable.Email
    ,mgrTable.FirstName + ' ' 
   + mgrTable.MiddleName + ' '
   + mgrTable.LastName
      as ManagerFullName
from
    tblEmployeeProfile
    inner join
    tblPersonnel as empTable
        on tblEmployeeProfile.EmployeeID = empTable.PersonnelID
    inner join
    tblPersonnel as mgrTable
        on tblEmployeeProfile.ManagerID = mgrTable.PersonnelID
where EmployeeID = @EmployeeID
0 голосов
/ 12 марта 2010
select p.EmployeeID
     , E.FirstName
     , E.MiddleName
     , E.LastName
     , E.Email
     ,   M.FirstName 
       + ' ' 
       + M.MiddleName
       + ' ' 
       + M.LastNameas as ManagerFullName
from tblPersonnel p
join tblEmployeeProfile as E on p.PersonnelID=E.EmplyeeID
join tblEmployeeProfile as M on M.PersonnelID=E.ManagerID
where E.EmplyeeID=@EmployeeID

при условии, конечно:

  • tblPersonnel.PersonnelID = tblEmployeeProfile.EmployeeID
  • у каждого человека есть менеджер (это означает, что генеральный директор будет отсутствовать, когда вы за него / нее)
0 голосов
/ 12 марта 2010

Попробуйте это:

SELECT
   p1.PersonnelID,
   p1.FirstName,
   p1.MiddleName,
   p1.LastName,
   p1.Email,
   p2.FirstName + ' ' + p2.MiddleName + ' ' + p2.LastName as ManagerFullName
FROM
   tblEmployeeProfile e,
   tblPersonnel p1,
   tblPersonnel p2
WHERE
   e.EmployeeId = p1.PersonnelId AND
   e.ManagerId = p2.PersonnelId AND
   e.EmployeeId = @EmployeeId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...