PDA

Ver la Versión Completa : Tratando de usar campos "calculados" en consultas con MySQL


Walterio
28-08-2012, 22:56:10
Hola a todos...
Mi consulta es simple (o compleja, según como se mire) :
Necesito hacer una consulta sobre una tabla MySQL donde hago algunos cálculos usando la función "IF" y a la cual le pongo un nombre a la columna que los hace (uso el AS...), ¿puedo crear otra columna tomando valores de las columnas antes creadas?...aqui va mi ejemplo :

Código SQL [-] (http://www.clubdelphi.com/foros/#)Select (IF(cc161.BAJ161 = 1 and cc161.UFA161 <= '2009-01-01' , 1, 0 ) ) AS BAJ, (IF('BAJ'=1 , 'Baja' , 'Alta' ) ) AS Bajas From CC161


Explico : Con la función IF creo una columna que llamo BAJ, y después necesito obtener el valor de esa columna para hacer otro cálculo.
Cuando intento ejecutarla, me avisa que la columna BAJ no existe bajo el mensaje "1054-Unknown column 'BAJ' in field list".
Entonces, ¿puedo recuperar el valor de BAJ para emplearla en la creación de otra columna?.
Probé hasta tratando de usar variables de usuario en la consulta, pero parece que a mi Delphi 6 con ADO no les gusta
eso de variables.

Desde ya, muchas gracias.

roman
28-08-2012, 23:00:00
No creo que esto sea posible. No sé siquiera si algún gestor permita esto.

// Saludos

Walterio
28-08-2012, 23:07:03
Román, muchas gracias por la respuesta.
Me temía que era algo imposible, o sea que, si en una columna tengo una sentencia medianamente compleja y después necesito usar su valor, debo escribir de nuevo lo que puse en la columna anterior más lo que necesito.
El ejemplo que puse es muy simple, en la consulta que estoy intentando armar, son mucho mas complejas, y si a eso le agrego más sentencias, se torna algo imposible de entender...no sé que otras alternativas tengo, se me agotaron las neuronas.
Nuevamente, gracias.

luisgutierrezb
28-08-2012, 23:07:28
Si mal no recuerdo, access si lo permite, MSSQL Server no, desconozco algún otro...

a veces lo que uso es usar una vista para generar unos campos y otra consulta sobre la vista para generar los demas...

roman
28-08-2012, 23:10:38
Eso... o copiar y pegar dentro de la misma consulta, es decir, repetir el cálculo para la otra columna. No es bonito, pero funciona :D

// Saludos

Walterio
28-08-2012, 23:13:19
Gracias luisgutierrezb (http://www.clubdelphi.com/foros/member.php?u=7000) por la respuesta.
No quiero hablar de más, pero me habia parecido que lo habia visto funcionar en algún lado...y si fuerzo mi memoria, me parece que era en SQLServer...pero no estoy seguro.
La consulta que intento hacer funcionar es muy propia de un módulo de mi sistema que estoy armando, no sé si justifica armar una vista...llegado el caso y al no encontrarle la vuelta, tal vez tenga que solucionarlo asi.
Nuevamente, muchas gracias.

orodriguezca
28-08-2012, 23:17:27
Quizas puedas utilizar una subconsulta con una tabla anidada. Prueba esto:


Select misubtabla.BAJ, (IF(misubtabla.BAJ=1 , 'Baja' , 'Alta' ) ) AS Bajas
from ( select (IF(cc161.BAJ161 = 1 and cc161.UFA161 <= '2009-01-01' , 1, 0 ) ) AS BAJ
From CC161 ) misubtabla

Walterio
28-08-2012, 23:18:06
:D me hiciste reir Román con la respuesta, es verdad, copy and paste.Que quede bonito o no, no es tan grave, me preocupa que una vez que esté funcionando, al tiempo tenga que hacer una modificación y no entienda que quise hacer con el código.

Seguiré buscando alternativas.

Walterio
28-08-2012, 23:33:07
Quizas puedas utilizar una subconsulta con una tabla anidada. Prueba esto:

Código SQL [-] (http://www.clubdelphi.com/foros/#)Select misubtabla.BAJ, (IF(misubtabla.BAJ=1 , 'Baja' , 'Alta' ) ) AS Bajas from ( select (IF(cc161.BAJ161 = 1 and cc161.UFA161 <= '2009-01-01' , 1, 0 ) ) AS BAJ From CC161 ) misubtabla



Gracias por la respuesta, lo pruebo y cuento que pasó.

Saludos