PDA

Ver la Versión Completa : como se usa el alias de campos ?


CarlosN
17-06-2005, 21:02:12
hola,

utilizo firebird 1.03 y desde ibexpert envio la siguiente consulta de prueba

select cdad as cd from tabla order by cd

y me dice que campo cd desconocido. Pero es que el alias cd no lo puedo utilizar en ningun otro sitio de la sentencia, ni en where ni en having, operaciones ni nada.

Lo estoy haciendo mal o esto es asi. Y si es asi para que vale el alias entonces.

maeyanes
17-06-2005, 21:24:39
El uso de as en los select se usa para especificar el nombre de la columna que se va a mostrar en el resultado. Principalmente se usa para poner un nombre más descriptivo a las consultas del tipo:

select fecha, sum(total) as TotalDia from facturas
group by fecha

En tu caso, debes usar:

select cdad from tabla order by cdad

CarlosN
18-06-2005, 17:25:24
Bien, pero supon que hablamos de una expresion compleja a la que se asigna el alias y queremos filtrar u ordernar por esta expresion/campo.

No se puede hacer ?, habria que crear una vista? porque para poner el nombre bonito ya lo hago en la columna del dbgrid o en la etiqueta del formulario.

Gracias por contestar.

roman
18-06-2005, 21:13:05
porque para poner el nombre bonito ya lo hago en la columna del dbgrid o en la etiqueta del formulario.


Yo estoy de acuerdo con esto. No siento un alias como un método para dar nombres descriptivos a los campos, aunque el ejemplo de maeyanes no es para un campo cualquiera sino un campo calculado en donde sí se justifica.

No siempre usas consultas para desplegarlas en un DBGrid. Muchas veces has de hacer consultas directamente en un administrador de bases y nombres como sum(total) o trim(concat(apellido, ' ', nombre)) no ayudan mucho para visualizar los datos.

Por otra parte, no todos los motores son tan agnósticos de los nombres de alias. Leyendo la documentación de MySql por ejemplo, veo que los alias de campos pueden usarse en cláusulas ORDER BY, GROUP BY y HAVING.

// Saludos

mariocase84
19-06-2005, 19:03:50
Hola CarlosN,

maeyanes y roman tienen razón, pero lo que vos tenes que hacer para que la consulta funcione es lo siguiente:

select cdad as cd
from tabla
order by cdad

lo que conseguis con ésto es que el nombre de la columna en la consulta será cd y lo estas ordenando por el campo cdad ;).

Eso es perfectamente válido para tu versión de Firebird.

saludos,

maeyanes
20-06-2005, 16:20:50
Bien, pero supon que hablamos de una expresion compleja a la que se asigna el alias y queremos filtrar u ordernar por esta expresion/campo.

No se puede hacer ?, habria que crear una vista? porque para poner el nombre bonito ya lo hago en la columna del dbgrid o en la etiqueta del formulario.

Para ordenar por un campo generado por alguna expresión del tipo count, sum, etc., puedes usar la posición del campo en el select, por ejemplo:


select fecha, sum(total) as TotalDia from facturas
group by fecha
order by fecha, 2 /* Aquí la consulta va a ordenar por la columna fecha y
luego por la columna sum(total) */



Gracias por contestar.

Se hace lo que se puede... ;)

CarlosN
20-06-2005, 19:56:23
Gracias por el interes.

Creo por lo que contais que los alias de campos en IB/FB son muy limitados, por ejemplo he comprobado que esto tampoco funciona

select cdad, count(blq) as cn, cn*2 from tabla group by cdad

(es una operacion ilogica pero demuestra que los alias no se pueden utilizar ni siquiera en otra parte de la expresion)

bueno :( mejor un poco de alias que nada.


Por lo menos he confirmado que las sentencias no las escribia yo mal sino que es que es asi.

maeyanes
20-06-2005, 20:02:18
Lo que pasa es que los alias son solo para cuestiones de visualización... por ejemplo, yo solo los uso para casos como el ejemplo que te di o cuando por X razón, 2 tablas tienen un nombre de campo igual y hay que identificarlos en el resultado.


Saludos...