2

如何从两个不同的表中选择 count(*) 来创建视图?

有以下表格:

部门表

  • DEPTNO
  • 名称
  • LOC

电磁脉冲表

  • EMPNO
  • 姓名
  • 工作
  • 经理
  • 雇用日期
  • 萨尔瓦多
  • 通讯
  • DEPTNO

我试过了:

CREATE VIEW PLACE
AS SELECT d.Loc CITY, count(d.Deptno) N_DEPT, count(e.Empno) N_EMP
   FROM Dept d, Emp e
   where d.Deptno = e.Deptno
   GROUP BY d.Loc, d.deptno;

得到了这个:

CITY          N_DEPT   N_EMP
CHICAGO         6       6
DALLAS          5       5
NEW YORK        3       3

每个城市只有 1 个 N_DEPT,所以结果是错误的:/。应该有:

CITY          N_DEPT   N_EMP
CHICAGO         1       6
DALLAS          1       5
NEW YORK        1       3
4

2 回答 2

4

使用DISTINCT,尝试

CREATE VIEW PLACE
AS 
SELECT  d.Loc CITY, 
        count(DISTINCT d.Deptno) N_DEPT, 
        count(e.Empno) N_EMP
FROM    Dept d 
        INNER JOIN Emp e
           ON d.Deptno = e.Deptno
GROUP BY d.Loc
于 2012-12-16T14:18:43.443 回答
3

您也可以简单地计算每个城市想要的东西,而无需加入要计算的表格:

create view PLACE
as
select d.Loc as CITY,
       (select count(distinct deptNo) from dept x where x.DeptNo = d.Deptno) as N_DEPT
       (select count(distinct Empno)  from Emp  e where e.DeptNo = d.Deptno) as N_EMP
from Dept d

这并不是一个更好的解决方案。它只是展示了一种看待问题并创建解决方案的不同方式。我喜欢它的是你可以添加任何你想以同样的方式计数的东西,即它引入了一种模板。

于 2012-12-16T14:31:11.727 回答