我需要编写一个连接查询来获取项目详细信息(如下图所示)。我的要求是项目经理需要为他指定的特定项目获取developer,WorkingHours,overtime
列表。我的数据库表结构如下。我可以使用这种结构来达到我的要求吗?或者需要对表结构进行任何更改?
CREATE TABLE Developer (
DeveloperID int NOT NULL IDENTITY,
Name varchar(255),
Email varchar(255),
Mobile varchar(255),
Primary key(DeveloperID)
);
CREATE TABLE Manager (
ManagerID int NOT NULL IDENTITY,
Name varchar(255),
Email varchar(255),
Mobile varchar(255),
Primary key(ManagerID)
);
这是我的要求,我可以使用SQL Server
使用此表结构获取此输出吗?如果有,怎么样?
答案 0 :(得分:1)
这适用于大多数DBMS:
SELECT m.Name manager,
p.Name project,
d.Name developer,
t1.allhours,
t1.allovertime,
100.0 * (t1.allhours + t1.allovertime) / t2.totalhours contribution
FROM Project p
LEFT JOIN Manager m ON m.ManagerID = p.ManagerID
LEFT JOIN (
SELECT dp.DeveloperID, dp.ProjectID, SUM(dp.WorkingHours) allhours, SUM(dp.Overtime) allovertime
FROM DevProj dp
GROUP BY dp.DeveloperID, dp.ProjectID
) t1 ON t1.ProjectID = p.ProjectID
LEFT JOIN Developer d ON d.DeveloperID = t1.DeveloperID
LEFT JOIN (
SELECT dp2.ProjectID, SUM(dp2.WorkingHours + dp2.Overtime) totalhours
FROM DevProj dp2
GROUP BY dp2.ProjectID
) t2 ON t2.ProjectID = p.ProjectID
WHERE m.Name = 'Manager A'
ORDER BY p.Name;
这将返回类似Manager | Project | Developer | Hours | Overtime | Contribution
的表格。所有项目的每个开发人员都有一行。