1

我将第一个视图显示为:

CREATE VIEW Projects AS
    SELECT DepartmentName, 
        COUNT(*)NumberOfProjects,
        OfficeNumber,
        Phone
    FROM   DEPARTMENT AS D JOIN PROJECT AS P
            ON D.DepartmentName = P.Department

    GROUP BY Department;

但是,我想在此视图中为每个部门显示一个“NumberOfOverBudgetProjects”。我创建了一个视图,其中列出了哪些项目超出了他们的每小时预算:

CREATE VIEW Budgets AS
    SELECT Department, 
        MaxHours AS ProjectMaxHours, SUM(HoursWorked) AS TotalHoursWorked,
        SUM(HoursWorked) - MaxHours AS Balance
    FROM   PROJECT AS P JOIN ASSIGNMENT AS A
        ON P.ProjectID = A.ProjectID
    GROUP BY P.ProjectID;

市场部应列出 2 个超出预算的项目,会计和财务都应列出 0 个。

有什么想法可以在原始视图中合并一列“OverBudgetProjects”吗?还是通过创建新视图?

4

1 回答 1

1

你可以这样做

CREATE VIEW OverBudgetProjects AS
  SELECT p.department, p.projectid
    FROM project p LEFT JOIN assignment a
      ON p.projectid = a.projectid
   GROUP BY p.department, p.projectid
  HAVING MAX(p.maxhours) < SUM(a.hoursworked);

CREATE VIEW Projects AS
  SELECT DepartmentName, 
         COUNT(DISTINCT p.projectid) NumberOfProjects,
         COUNT(DISTINCT o.Projectid) NumberOfOverBudgetProjects,
         OfficeNumber,
         Phone
    FROM department d JOIN project p
      ON d.DepartmentName = p.Department LEFT JOIN OverBudgetProjects o
      ON d.DepartmentName = o.Department
   GROUP BY p.Department;

发行样本输出

SELECT * FROM Projects

| 部门名称 | 项目数量 | 超预算项目数 | 办公室号码 | 电话 |
|----------------|------------------|------------- ---------------|--------------|--------------|
| 会计 | 1 | 0 | BLDG01-100 | 360-285-8300 |
| 金融 | 2 | 0 | BLDG01-140 | 360-285-8400 |
| 营销 | 2 | 2 | BLDG02-200 | 360-287-8700 |

这是SQLFiddle演示

于 2013-09-27T04:07:36.797 回答