Oracle ordena por diferentes condiciones
Tengo una consulta y me gustaría hacer dos tipos de orden en función de una condición.
Por ejemplo, si un campo es NULL, necesito hacer un pedido y si no es así, tengo que hacer otro pedido. Cómo puedo hacerlo ?
select *
from table_1 t
order by (if t.field1 is null then
order by t.field2 DESC, field3 ASC
else
order by t.field4 ASC, field5 DESC)
Este es un código de muestra: quiero hacer un orden diferente (ASC / DESC y diferentes columnas), en función del valor de FIELD1
EJEMPLO
CONDICIONAL
ID FIELD1 FIELD2 FIELD3 FIELD4 FIELD5
1 1 2 3 4 5
2 NULL 6 7 8 9
DATOS
ID PARENT_ID DATA1 DATA2 DATA3
1 1 X Y J
2 1 Z W U
3 2 XY YX O
4 2 ZW WZ I
select d.*
from data d, conditional c
where d.parent_id = c.id
and d.parent_id = 1
order by
case
when c.field1 is null then
data1 asc, data2 desc
else
data3 asc, data1 desc
end
En este ejemplo, selecciono las filas de DATOS UNO y DOS (las filas que tienen ID principal = 1). Ahora que he tomado esta decisión, quiero ampliar las columnas DATOS en función del valor de la columna CONDICTIONAL.FIELD1. Espero que ahora esté más limpio.
Claro que esta consulta no funciona, pero esto es "lo que necesitaré".