Oracle - AYUDA CON ORDENACION DENTRO DE CONSULTA SQL

 
Vista:

AYUDA CON ORDENACION DENTRO DE CONSULTA SQL

Publicado por DBAMASTER (3 intervenciones) el 25/04/2007 00:55:17
Tengo un problema con una consulta sql en oracle que no encuentro la forma de cómo solucionar.
Supongamos que tengo una tabla como la siguiente:

Registro--|---Campo1--|---Campo2--|---Campo3
--------------|-----------------|-----------------|--------------
-------1-----|-----datoD----|--------6-------|-------1-----
-------2-----|-----datoC----|--------3-------|-------3-----
-------3-----|-----datoB----|--------6-------|-------2-----
-------4-----|-----datoD----|--------2-------|-------2-----
-------5-----|-----datoB----|--------4-------|-------1-----
-------6-----|-----datoC----|-------10------|-------1-----
-------7-----|-----datoC----|--------8-------|-------2-----
-------8-----|-----datoA----|--------3-------|-------2-----
-------9-----|-----datoA----|--------2-------|-------3-----

y quiero obtener esos mismos datos pero ordenados de la siguiente manera:

Registro--|---Campo1--|---Campo2--|---Campo3
--------------|-----------------|-----------------|--------------
-------2-----|-----datoC----|--------3-------|-------3-----
-------7-----|-----datoC----|--------8-------|-------2-----
-------6-----|-----datoC----|-------10------|-------1-----
-------9-----|-----datoA----|--------2-------|-------3-----
-------8-----|-----datoA----|--------3-------|-------2-----
-------3-----|-----datoB----|--------6-------|-------2-----
-------5-----|-----datoB----|--------4-------|-------1-----
-------4-----|-----datoD----|--------2-------|-------2-----
-------1-----|-----datoD----|--------6-------|-------1-----

Es decir:
primero, buscar los datos de Campo3 de mayor a menor que tengan el Campo2 con valor más grande, por ejemplo el primer registro serìa el numero 2 con Campo1=datoC, Campo2=3 y Campo3=3 porque 2 es el mayor en Campo3 y 3 es el mayor en Campo2.

Luego, agregar los registros que en Campo3son menores sin importar el valor que tengan en Campo2.

De otra forma, todo el proceso se puede ver como:
paso 1: Obtener los datos con Campo3 mayor

Registro--|---Campo1--|---Campo2--|---Campo3
--------------|-----------------|-----------------|--------------
-------2-----|-----datoC----|--------3-------|-------3-----
-------9-----|-----datoA----|--------2-------|-------3-----

en este caso sería el registro 2 y 9 porque 3 es el mayor en la columna Campo3

paso2: Intercalar los registros en forma descendente con respecto a Campo3 pero con Campo1 iguales

Registro--|---Campo1--|---Campo2--|---Campo3
--------------|-----------------|-----------------|--------------
-------2-----|-----datoC----|--------3-------|-------3-----
-------7-----|-----datoC----|--------8-------|-------2-----
-------6-----|-----datoC----|-------10------|-------1-----

-------9-----|-----datoA----|--------2-------|-------3-----
-------8-----|-----datoA----|--------3-------|-------2-----

-------3-----|-----datoB----|--------6-------|-------2-----
-------5-----|-----datoB----|--------4-------|-------1-----

-------4-----|-----datoD---|--------2-------|-------2-----
-------1-----|-----datoD---|--------6-------|-------1-----

...y ese es el reultado. ¿Dificil?

Espero y me hay explicado, he buscado muchas formas de hacerlo pero no encuenro la solución. Si alguien tiene alguna idea de cómo hacerlo, por favor digame.

por su atención, mil gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder