jueves, 7 de junio de 2012

Cambiar orden en ORDER BY

Quiza por alguna razón tengas que regresar en un query algo ordenado pero el orden natural no te sirva.

Una forma de cambiar el orden de lo que te regresa un query es usando la funcion decode.

Imaginemos que tenemos la siguiente tabla

create table CAT_MASCOTA
(
     id_mascota decimal(10) ;
     nombre_mascota varchar(20);
) ;

insert into CAT_MASCOTA ( id_mascota, nombre_mascota) values ( 1, 'Perro');
insert into CAT_MASCOTA ( id_mascota, nombre_mascota) values ( 2, 'Gato');
insert into CAT_MASCOTA ( id_mascota, nombre_mascota) values ( 3, 'Perico');
insert into CAT_MASCOTA ( id_mascota, nombre_mascota) values ( 4, 'Raton');
insert into CAT_MASCOTA ( id_mascota, nombre_mascota) values ( 5, 'Hamster'); 

Si ejecutas:

select * from CAT_MASCOTA order by id_mascota;

Te dara las mascotas en el orden tal cual los hemos insertado. Imaginemos que queremos que nos regrese primero el GATO luego el PERICO, luego el RATON, luego el PERRO y al final el HAMSTER

Esto nos indicaria el siguiente orden (pongo el id de la mascota y luego el orden en que quiero que aparezca)

2 ->1
3->2
4->3
1->4
5->5

Luego entonces usando la funcion decode en el order by obtenemos los registros en el orden que queremos:

select * from CAT_MASCOTA order by decode( id_mascota,
2, 1
3, 2
4, 3
1, 4
5, 5 );

Esto me resulto util en una ocación reciente, lo pongo para no olvidarlo.



No hay comentarios:

Publicar un comentario