我将第一个视图显示为:
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"在原始视图?或者通过创建新视图?
答案 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 演示