【发布时间】:2020-08-20 06:30:44
【问题描述】:
我有两个表 Employees 和 Assignments,其内容如下图所示(分别输出 A 和 B)。 Employees 中的每个员工最多有1 名项目负责人 (Assignment.A_Leader = 1),最多 1 名。 1 个项目控制器 (Assignment.A_Controller = 1) 分配。我想获取所有员工的列表,以及他们是领导者或控制者的项目。如果员工没有此类分配,则应出现NULL。我设法列出领导或项目任务。但是,我无法按照here 的建议将两者放在适当的列表中(参见尝试 E)。为了获得所需的决赛桌,我必须添加什么?
下面代码的字母 A-E 对应于图像中输出的字母 A-E。
我使用的是 Microsoft SQL Server 2017。
-- A: all employees
SELECT * FROM Employee
-- B: all assignments
SELECT * FROM Assignment
-- C: employees with their projects as LEADERS
SELECT E.E_FirstName as First, E.E_LastName as Last, L.A_ProjectID as Leader
FROM Employee E LEFT JOIN
(SELECT A.E_ID, A_ProjectID FROM Assignment A WHERE A.A_Leader=1) L
ON E.E_ID = L.E_ID
-- D: employees with their projects as CONTROLLERS
SELECT E.E_FirstName as First, E.E_LastName as Last, C.A_ProjectID as Controller
FROM Employee E LEFT JOIN
(SELECT A.E_ID, A_ProjectID FROM Assignment A WHERE A.A_Controller=1) C
ON E.E_ID = C.E_ID
-- E: employees with their projects as LEADERS or CONTROLLERS
SELECT X.First, X.Last, X.Leader, Y.Controller FROM
(SELECT E.E_FirstName as First, E.E_LastName as Last, L.A_ProjectID as Leader
FROM Employee E LEFT JOIN
(SELECT A.E_ID, A_ProjectID FROM Assignment A WHERE A.A_Leader=1) L
ON E.E_ID = L.E_ID) as X,
(SELECT E.E_FirstName as First, E.E_LastName as Last, C.A_ProjectID as Controller
FROM Employee E LEFT JOIN
(SELECT A.E_ID, A_ProjectID FROM Assignment A WHERE A.A_Controller=1) C
ON E.E_ID = C.E_ID) as Y
【问题讨论】:
标签: sql-server tsql join select ssms-2017