Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL语句中的垂直联接_Sql_Sql Server_Database - Fatal编程技术网

SQL语句中的垂直联接

SQL语句中的垂直联接,sql,sql-server,database,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 Leave

我得到了以下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

此处报告的是员工代码。我需要垂直连接它们。类似于Union运算符的内容

您希望重新连接到
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;

您可能不想要
*
——我想这只是问题的简写。最好显式列出列,特别是因为有重复的列名。

这可能对您有所帮助-

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