Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Tratando de usar campos "calculados" en consultas con MySQL (https://www.clubdelphi.com/foros/showthread.php?t=80019)

Walterio 28-08-2012 22:56:10

Tratando de usar campos "calculados" en consultas con MySQL
 
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 [-]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 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:

Código SQL [-]
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

Cita:

Empezado por orodriguezca (Mensaje 441008)
Quizas puedas utilizar una subconsulta con una tabla anidada. Prueba esto:

Código SQL [-]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


La franja horaria es GMT +2. Ahora son las 00:30:04.

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