编写连接查询以获取项目信息

时间:2018-03-08 19:56:01

标签: sql-server join foreign-keys

我需要编写一个连接查询来获取项目详细信息(如下图所示)。我的要求是项目经理需要为他指定的特定项目获取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使用此表结构获取此输出吗?如果有,怎么样?

1 个答案:

答案 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的表格。所有项目的每个开发人员都有一行。