2012-12-16 67 views
2

如何從兩個不同的表中選擇計數(*)來創建視圖?從多個表中選擇計數(*)以創建視圖

有表:

DEPT表

  • DEPTNO
  • DNAME
  • LOC

EMP表

  • EMPNO
  • ENAME
  • JOB
  • MGR
  • HIREDATE
  • SAL
  • COMM
  • 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

使用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 
+0

謝謝,它的作品:)。我被'明顯'禁止用於'觀點'的講座弄糊塗了:/但這取決於我看到的數據庫。再次感謝! – TheSpaceboy0

+0

不客氣! ':D' –

2

你也可以簡單地算你每個城市需要的東西,而連接表進行計算:

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 

這不是更好的解決方案。它只是展示了一種查看問題並創建解決方案的不同方式。 我喜歡的是,你可以添加任何你想要以相同的方式計數,即它引入了一種模板。

+0

這是一個有趣且聰明的解決方案,但我收到了消息日誌ORA-01427:單行子查詢返回多行:/ – TheSpaceboy0

+0

對不起,我的查詢中存在一個愚蠢的錯誤。它應該讀取'(select count(distinct ...)'。感謝您向我顯示錯誤,我更新了我的建議。 – alzaimar