2013-03-13 4 views
1

Je viens de commencer à apprendre le SQL. J'utilise une base de données Oracle.PL SQL sélectionnez la première ligne de la colonne 1 où la colonne 2 est unique

Table emp avec colonne empno, ename, travail, mgr, hiredate, sal, comm, deptno.

Je veux obtenir le premier enregistrement de la colonne ename pour chaque deptno et ename doivent être triés par asc.

SQL suivante fonctionne:

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 

Je veux optimiser donc je ne besoin de réécrire si j'ajouter quelques enregistrement à DEPTNO colonne.

J'ai essayé avec SELECT distincts comme

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

Répondre

0

Si je comprends ce que vous essayez de faire correctement, ce qui suit devrait fonctionner:

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

SQL Fiddle here.

+0

Merci :) que tout ce que je avais besoin. J'ai eu un problème avec le groupe et à la fin j'ai oublié que la commande existe ... – Keiishi

+0

Super! Faites moi savoir si vous avez des questions.. –

0

Une autre façon de le faire

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

SQLFiddle

Questions connexes