2013-03-13 73 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

相关问题