2013-03-13 93 views
1

我剛開始學習SQL。我正在使用Oracle數據庫。PL SQL從列1中選擇第一列,其中列2是唯一的

表emp與列empno,ename,工作,mgr,hiredate,sal,comm,deptno。

我想從每個deptno的ename列中獲取第一條記錄,ename必須按asc排序。

下面的SQL工作:

Select ename 
from (Select d.ename 
From emp d 
Where d.deptno = 10 
Order by ename asc) 
where rownum <= 1 
Union 
Select ename 
from (Select d.ename 
From emp d 
Where d.deptno = 20 
Order by ename asc) 
where rownum <= 1 
Union 
Select ename 
from (Select d.ename 
From emp d 
Where d.deptno = 30 
Order by ename asc) 
where rownum <= 1 
Union 
Select ename 
from (Select d.ename 
From emp d 
Where d.deptno = 40 
Order by ename asc) 
where rownum <= 1 

我想優化它,所以我不需要重寫它,如果我添加一些記錄DEPTNO列。

SELECT不同試過像

SELECT ename FROM emp WHERE (SELECT distinct deptno FROM emp) 

回答

0

如果我明白你正確地做什麼,下面應該工作:

SELECT MIN(d.ename) as ename 
    FROM emp d 
    GROUP BY d.deptno 
    ORDER BY ename asc 

SQL Fiddle here

+0

謝謝:)這正是我需要的。我遇到了問題,最後我忘了命令存在... – Keiishi 2013-03-13 21:16:57

+0

太棒了!如果您有任何疑問,請告訴我。 – 2013-03-13 21:20:46

0

另一種方式來做到這一點

SELECT d.deptno, 
     (SELECT ename 
      FROM emp e 
     WHERE e.deptno = d.deptno AND ROWNUM <=1) ename 
    FROM dep d 

SQLFiddle

相關問題