显示超支项目数量的最佳方式

时间:2013-09-27 02:39:31

标签: mysql sql views

我将第一个视图显示为:

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"在原始视图?或者通过创建新视图?

1 个答案:

答案 0 :(得分: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

| DEPARTMENTNAME | NUMBEROFPROJECTS | NUMBEROFOVERBUDGETPROJECTS | OFFICENUMBER |        PHONE |
|----------------|------------------|----------------------------|--------------|--------------|
|     Accounting |                1 |                          0 |   BLDG01-100 | 360-285-8300 |
|        Finance |                2 |                          0 |   BLDG01-140 | 360-285-8400 |
|      Marketing |                2 |                          2 |   BLDG02-200 | 360-287-8700 |

这是 SQLFiddle 演示