Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 28-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No creo que esto sea posible. No sé siquiera si algún gestor permita esto.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 28-08-2012
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
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...
Responder Con Cita
  #5  
Antiguo 28-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

// Saludos
Responder Con Cita
  #6  
Antiguo 28-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 28-08-2012
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 28-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 28-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
Cita:
Empezado por orodriguezca Ver Mensaje
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cursor "intermitente" al realizar consultas. mlara Firebird e Interbase 1 24-05-2008 02:51:26
Error Invalid blob handle in record buffer??? sin usar "Blobs to cache" varuhs Conexión con bases de datos 4 22-01-2007 21:19:53
Firebir y usar "IF" en la clausula "SELECT" papulo SQL 6 25-07-2006 21:38:04
Campos "boolean" en MySql salvica MySQL 3 01-03-2005 15:02:16


La franja horaria es GMT +2. Ahora son las 17:06:58.


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
Copyright 1996-2007 Club Delphi