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. |
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!!!! |
:( :( :(
|
Tengo entendido que Interbase 7.5 ya incorpora la función COALESCE con la cual puedes convertir los valores NULL:
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 |
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 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 :
Mil gracias de nuevo por las ayudas prestadas. |
La franja horaria es GMT +2. Ahora son las 15:24:46. |
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