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」を表示したいと考えています。どのプロジェクトが 1 時間あたりの予算を超えているかを一覧表示するビューを作成しました。

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

| | 部門名 | NUMBEROFPROJECTS | NUMBEROFOVERBUDGETPROJECTS | オフィス番号 | 電話 |
|----------------|--------------------------------|-------------- ---------------|--------------|--------------|
| | 会計 | 1 | 0 | BLDG01-100 | 360-285-8300 |
| | ファイナンス | ファイナンス | 2 | 0 | 建物01-140 | 360-285-8400 |
| | マーケティング | 2 | 2 | BLDG02-200 | 360-287-8700 |

これがSQLFiddleのデモです

于 2013-09-27T04:07:36.797 に答える