Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con 'order by' (https://www.clubdelphi.com/foros/showthread.php?t=37245)

gluglu 07-11-2006 20:33:12

Ayuda con 'order by'
 
Saludos a todos,

Necesito una ayudita en una cláusula 'order by'.

Tengo tres campos que quiero ordenar, CATEG (numérico), SUBCATEG (numérico), y CODIGO (caracter).

Mi problema es que CODIGO puede contener 'Null', que necesito que sea diferente a un caracter en blanco.

Quiero ordenarlo en principo así : 'order by CATEG, SUBCATEG, CODIGO' peeeeeeero que en CODIGO aquellos registros que contengan algún caracter me salgan posteriores a los que tengan 'null'.

Y es aquí donde Interbase 7.5 me pone primero los que tienen algún caracter y luego los que tienen 'null' (en CODIGO) y quiero que sea al revés. :rolleyes:

Un orden ejemplo sería (así quiero yo que me lo ordene)
CATEG SUBCATEG CODIGO
1 1 null
1 2 null
1 3 null
1 3 ABC

... pero Interbase 7.5 me lo ordena de esta manera
CATEG SUBCATEG CODIGO
1 1 null
1 2 null
1 3 ABC
1 3 null

Gracias por vuestra ayuda.

xander 07-11-2006 20:55:11

Ohhhh, es en estos casos en los que doy un respiro de felicidad al pensar de que yo en una situación como la tuya usando Firebird lo resolvería tan facil como poner:

order by CATEG, SUBCATEG, CODIGO NULLS FIRST

Dios!!!!, Gracias por estos pequeños momentos de felicidad no-justificada!!!!

gluglu 07-11-2006 21:00:04

:( :( :(

roman 07-11-2006 21:27:31

Tengo entendido que Interbase 7.5 ya incorpora la función COALESCE con la cual puedes convertir los valores NULL:

Código SQL [-]
select categ, subcateg, coalesce(codigo, 0)
...

de manera que obtendrás 0 para los valores NULL. Lo que desconozco es si puedes usar el COALESCE en la cláusula ORDER BY.

// Saludos

gluglu 08-11-2006 09:33:09

Tengo que reconocerle una vez más a Román por su maravillosa sabiduría ! ;)

No conocía la función COALESCE, ni tampoco NULLIF que he observado vienen descritas en un fichero adicional de Interbase 7.5 como novedades y que uno se mira y lee al principio pero después no se puede acordar de todo, y menos de cosas que al principio a uno le parecen sin mayor trascendencia :o

Efectivamente, tal y como anticipó Román, COALESCE no permite su utilización en 'Order by'.

Intenté algo así como
Código SQL [-]
Select ... COALESCE(CODIGO,' ') as COA_CODIGO ...
order by CATEG, SUBCATEG, COA_CODIGO
y me salta con que 'datatype not supported for arithmetic'.

Finalmente he acudido a la cláusula CASE de Interbase (cuya existencia también desconocía :rolleyes: ) y lo he solucionado finalmente de esta manera :

Código SQL [-]
Select CATEG, SUBCATEG,
Case When CODIGO is Null then ' ' else CODIGO End as AUX_CODIGO
from TABLE
order by CATEG, SUBCATEG, AUX_CODIGO

Mil gracias de nuevo por las ayudas prestadas.


La franja horaria es GMT +2. Ahora son las 08:05:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi