垂直加入SQL语句

时间:2013-05-20 11:12:11

标签: sql sql-server database

我有以下SQL语句:

select * from Leaves inner join LeaveDetails on Leaves.LeaveId= LeaveDetails.LeaveId 
inner join Employee on Leaves.EmployeeCode =  Employee.EmployeeCode
inner join LeaveType on Leaves.LeaveTypeId= LeaveType.LeaveTypeId 
inner join LeaveStatus on Leaves.StatusId = LeaveStatus.StatusId 
inner join Employee_organizationaldetails on Employee_organizationaldetails.EmployeeCode=Employee.EmployeeCode 
where Leaves.LeaveId = 7295 

Employee_organizationdetails包含另一个名为reporting officer的列,它是同一Employee表的外键。现在我需要得到员工的名字。

如何编写上述查询,以便我可以将报告人员的姓名作为另一列获取,而无需获取执行查询

select (FirstName + ' ' + LastName) as name from Employee where EmployeeCode = ReportingTo

此处ReportingTo是员工代码。我需要垂直加入它们。类似于Union运算符的东西

2 个答案:

答案 0 :(得分:1)

您想要加入Employee表格的另一个“副本”:

select *, (ro.FirstName + ' ' + LastName) as ReportingName
from Leaves inner join LeaveDetails on Leaves.LeaveId= LeaveDetails.LeaveId 
inner join Employee on Leaves.EmployeeCode =  Employee.EmployeeCode
inner join LeaveType on Leaves.LeaveTypeId= LeaveType.LeaveTypeId 
inner join LeaveStatus on Leaves.StatusId = LeaveStatus.StatusId 
inner join Employee_organizationaldetails on Employee_organizationaldetails.EmployeeCode=Employee.EmployeeCode  left outer join
Employee ro
on ro.EmployeeCode = ReportingTo
where Leaves.LeaveId = 7295;

你可能不想要* - 我认为这只是问题的简写。最好明确列出列,特别是因为列名重复。

答案 1 :(得分:0)

这可能对你有所帮助 -

SELECT 
      *
    , ReportingName = ro.FirstName + ' ' + LastName
FROM (
    SELECT *
    FROM dbo.Leaves l
    WHERE l.LeaveId = 7295
) l
JOIN dbo.LeaveDetails ld ON l.LeaveId = ld.LeaveId 
JOIN dbo.Employee e ON l.EmployeeCode =  e.EmployeeCode
JOIN dbo.LeaveType lt ON l.LeaveTypeId = lt.LeaveTypeId 
JOIN dbo.LeaveStatus ls ON l.StatusId = ls.StatusId 
JOIN dbo.Employee_organizationaldetails e2 ON e2.EmployeeCode = e.EmployeeCode  
LEFT JOIN dbo.Employee ro ON ro.EmployeeCode = ReportingTo