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 12-08-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Select mostrando otro dato

Hola que tal.
Quiero seleccionar un dato de una tabla pero que el dato que me muestre se otro, es decir en una tabla cliente quiero mostrar sus campos, tiene uno que se llama tipo el cual es un caracter y puede ser uno de los siguientes valores e,b,r o m. e de excelente, b de bueno, r de regular y m de malo y quiero saber como si es que es posible en sql, lograr que si el cliente en el campo tipo tiene un valor e me retorne excelente, si tiene un valor de b me retorne bueno y asi respectivamente.
De antemano gracias.
Responder Con Cita
  #2  
Antiguo 12-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

esto no tiene una solución estándar... y si es posible y cómo conseguirlo dependerá del motor que uses.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 12-08-2004 a las 05:26:02.
Responder Con Cita
  #3  
Antiguo 12-08-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por el_enigma1
Quiero seleccionar un dato de una tabla pero que el dato que me muestre se otro, es decir en una tabla cliente quiero mostrar sus campos, tiene uno que se llama tipo el cual es un caracter y puede ser uno de los siguientes valores e,b,r o m. e de excelente, b de bueno, r de regular y m de malo y quiero saber como si es que es posible en sql, lograr que si el cliente en el campo tipo tiene un valor e me retorne excelente, si tiene un valor de b me retorne bueno y asi respectivamente.
Como bien te han dicho si lo quieres hacer en el SGBD, dependerá de cual usas, por ejemplo en SQLServer puedesutilizar algo similar a ésto:

Código SQL [-]
// consulta normal; decimales es un número
select decimales, * from tmoneda
 
// Para que los decimales salgan con letra... 
select 
 Cuantosdecimales = case decimales
   when '1' then '1 decimal'
   when '2' then '2 decimales'
   when '3' then '3 decimales'
   when '4' then '4 decimeles'
   when '5' then '5 decimales'
   when '6' then '6 decimales'
   else '...demasiados'
 end,
 * from TMoneda

Si usas otro, talvez puedas buscar si hay algo similar

Otra opción es hacerlo sobre el DBGrid (si es que los Datos los estás sacando finalmente en el DBGrid); Se trata de programar el evento OnDrawColumnCell y a partir del valor de la columna pintar otra cosa.

Código Delphi [-]
  DBGrid.Canvas.TextRect(
     Rect{parámetro del evento}, 
     Left{cambialo segun la alineación que le quieras dar al texto}, 
     Rect.Top{a que altura se pinta el texto}, 
     Text{texto nuevo que quires pintar});
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 12-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por Neftali
Otra opción es hacerlo sobre el DBGrid (si es que los Datos los estás sacando finalmente en el DBGrid); Se trata de programar el evento OnDrawColumnCell y a partir del valor de la columna pintar otra cosa.
En mi opinión, es preferible a esto, por su sencillez, valerse del método onGetText del TField asociado, te recomiendo que leas el help sobre él, y veras que es muy sencillo devolver el significado de cada letra o indice.

De cualquier manera, creo que lo que querias es obtenerlo mediante SQL, ¿no?. Antes de ver todas las posibles soluciones en todos los posibles motores, preferiría que digas en cual trabajas...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 12-08-2004 a las 17:47:18.
Responder Con Cita
  #5  
Antiguo 12-08-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Cita:
Empezado por jachguate
De cualquier manera, creo que lo que querias es obtenerlo mediante SQL, ¿no?. Antes de ver todas las posibles soluciones en todos los posibles motores, preferiría que digas en cual trabajas...

Estoy trabajando con interbase 6.
Y voy probar las sugerencias que me dieron, tal vez con eso sea suficiente.

Última edición por el_enigma1 fecha: 12-08-2004 a las 23:57:46.
Responder Con Cita
  #6  
Antiguo 13-08-2004
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
Las opciones que te presentan son del todo correctas pero quizá antes de esto cabe preguntarse si no sería mejor agregar la 'tabla de significados' a la base de datos y usar relaciones de tablas como dios manda.

// Saludos
Responder Con Cita
  #7  
Antiguo 14-08-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Cita:
Empezado por roman
Las opciones que te presentan son del todo correctas pero quizá antes de esto cabe preguntarse si no sería mejor agregar la 'tabla de significados' a la base de datos y usar relaciones de tablas como dios manda.

// Saludos
La verdad nunca he utilizado 'tabla de significados'.
Como quedaria el select?
Responder Con Cita
  #8  
Antiguo 14-08-2004
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
Bueno, el término es de mi propia invención aunque no desde luego el concepto. A este tipo de tablas yo las conozco como catálogos. Proveen una descripción asociada a un código.

En tu caso, tienes la tabla clientes, digamos:

clientes = (id, nombre, domicilio, telefono, tipo_id)

Agregarías la tabla de descripciones a tu base de datos:

tipos = (id, tipo)

con los datos:

Código:
id  | tipo
----+----------
e   | exccelente
b   | bueno
r   | regular
m   | malo
En estos términos puedes consultar la tabla de clientes así:

Código SQL [-]
select c.id, c.nombre, t.tipo
from clientes c
left join tipos t on t.id = c.tipo_id

// Saludos
Responder Con Cita
  #9  
Antiguo 17-08-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Neftali:
La opcion de sql no me funciona(uso interbase6 y talvez en este no se puede o giual lo hice mal) y la del evento onDrawCell no me gusta mucho.

jachguate:
Con el onGetText hace lo quiero.

roman:
Es una buena opcion.


Gracias por su ayuda, seguie buscando e intentando a ver si me queda en sql pero todo parece indicar que no.
Responder Con Cita
  #10  
Antiguo 19-08-2004
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
La solucion de Roman, es excelente!!!!!!!!!


yo haria lo siguiente: usaria campos calculados.....


en la lista de campos de tu dataset, agregaria un campo calculado llamado tipoCliente, por ejemplo, y en el evento oncalcFields del dataset, comprobaria los valores del campo (donde estan guardados e, b, r, m ) y en base a esos valores asignarle el respecitvo valor a el campo TipoCliente




espero haberte ayudado



P.S. no es desde sql como tu querias, pero funciona
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #11  
Antiguo 02-09-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Cita:
Empezado por Paoti
La solucion de Roman, es excelente!!!!!!!!!


yo haria lo siguiente: usaria campos calculados.....


en la lista de campos de tu dataset, agregaria un campo calculado llamado tipoCliente, por ejemplo, y en el evento oncalcFields del dataset, comprobaria los valores del campo (donde estan guardados e, b, r, m ) y en base a esos valores asignarle el respecitvo valor a el campo TipoCliente




espero haberte ayudado



P.S. no es desde sql como tu querias, pero funciona
Con lo que dijo roman y jachuate se hace lo que quiero bueno de diferente manera cada uno pero funcionan ambos. Ahora solo tango que decidir por cual metodo me decido, en un principio pense en el de jachuate por que no secesito meter mas datos a la base de datos, pero de la otra manera puedo agregar mas registros a la base de datos asi que en este caso seria mejor la opcion de roman (se puede manipular la base de datos sin modificar el programa), aunque creo que todos los datos van a ser fijos(todavia no se deciden) realmente no necesitaria ingresar mas registros, por lo tanto no tendria que modificar el programa(en este caso la opcion de jachuate seria una mejor)
Responder Con Cita
  #12  
Antiguo 02-09-2004
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
Cita:
Empezado por el_enigma1
aunque creo que todos los datos van a ser fijos(todavia no se deciden) realmente no necesitaria ingresar mas registros, por lo tanto no tendria que modificar el programa
Mi recomendación: agrega la tabla.

Si en todos estos días aún no han decidido lo más probable es que, aunque decidan tenerlos fijos, apenas entregues la aplicación, te pedirán que agregues alguna otra categoría. Es la ley de Murphy.

La opcion de OnGetText yo la usaría sólo en bases cuya estructura no puedo modificar, pero si tengo la opción pues prefiero agregar el catálogo.

// Saludos
Responder Con Cita
  #13  
Antiguo 02-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Creo sinceramente que siempre que haya alguna posibilidad de que la tabla de significados cambie, es mejor usar la base de datos. En casos específicos (como el sexo, por ejemplo) en que no hay posibilidades que surgan nuevos ( bueno, habrá quien opine lo contrario, ) la solución del OnGetText es válida y funcional, dandote la ventaja de no tener que hacer viajar las descripciones por la red.

En fin, la experiencia es la que te va dando un mejor criterio para decidir...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #14  
Antiguo 03-09-2004
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
Cita:
Empezado por jachguate
bueno, habrá quien opine lo contrario
No seré yo quien te contradiga

Pero nada más por llevar la contraria diré que, incluso en casos como éste puede convenir tener la tabla ya que la descripción puede cambiar. Un día puede ser (Hombre, Mujer) y al otro (Masculino, Femenino).

En cuanto a lo de viajar a través de la red bueno, es cierto, pero en el caso de catálogos que se van a usar una y otra vez en varios lados de la aplicación se pueden cargar al inicio en un ClientDataSet para no estar molestando a la bd en cada ocasión.

// Saludos
Responder Con Cita
  #15  
Antiguo 05-09-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Cita:
Empezado por roman
No seré yo quien te contradiga

En cuanto a lo de viajar a través de la red bueno, es cierto, pero en el caso de catálogos que se van a usar una y otra vez en varios lados de la aplicación se pueden cargar al inicio en un ClientDataSet para no estar molestando a la bd en cada ocasión.

// Saludos

Como hago lo del ClienDataSet?
Responder Con Cita
  #16  
Antiguo 05-09-2004
el_enigma1 el_enigma1 is offline
Miembro
 
Registrado: may 2004
Posts: 57
Poder: 21
el_enigma1 Va por buen camino
Cita:
Empezado por jachguate

En fin, la experiencia es la que te va dando un mejor criterio para decidir...

Hasta luego.

Eso que ni que, tienes mucha razon.(no me ayuda en nada poner este comentario pero bueno cuando alguien tiene razon no hay mas que discutir)
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


La franja horaria es GMT +2. Ahora son las 07:06:43.


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