martes, 29 de septiembre de 2009

SELECT: Obtener los primeros registros en una consulta

Para que al realizar una consulta nos salga el número de registro podemos realizar lo siguiente:
select rownum , campo1, campo2 from tabla1

la salida sera algo así
1 campo1 campo2
2 campo1 campo2
3 campo1 campo2
4 campo1 campo2

Si queremos usar una consulta con un order by y que se muestre el número de columna podríamos usar esta consulta:
select rownum, campo1, campo2 from tabla1 order by campo1
La salida no es lo que queremos:
1 campo1 campo2
4 campo1 campo2
3 campo1 campo2
2 campo1 campo2
Si queremos que el número se corresponda con el orden podemos hacer esta consulta:
select rownum , campo1, campo2 from tabla1 , dual where tabla1.campo1 = dual.dummy(+)
order by campo1
1 campo1 campo2
2 campo1 campo2
3 campo1 campo2
4 campo1 campo2

Estamos realizando un "outer join" entre la tabla dual y la tabla1 usando como campo común el que deseamos para la ordenación. La salida estaŕa ordenada por el campo1 y los número serán correctos.

Si tenemos dos o más campos con los que se tiene que ordenar, podemos realizar una consulta dentro de otra:
select rownum, t1.* from (select campo1, campo2 from tabla1 ORDER BY campo1 , campo2) t1;

Si ,continuando con el caso anterior, tenemos una consulta con un Order by y queremos restringirlo a los N primeros registros podemos usar lo siguiente

Si esta es la consulta con la clausula order by:
select campo1, campo2 from tabla1 Order by campo1

Rodearemos la consulta con otro select y le aplicaremos la restricción en cuanto al número de columnas:
select * from (select campo1, campo2 from tabla1 Order by campo1) where rownum < 100

por regla general:
select * from ( tuconsulta) where rownum < 100

No hay comentarios: