Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda con consulta sql

Estas en el tema de Duda con consulta sql en el foro de Bases de Datos General en Foros del Web. hola esta es mi duda Resulta que tengo la tabla Padres con los siguientes datos dad_id dad_nom dad_expe dad_expepro dad_oper dad_gest dad_jefe 1 juan 0 ...
  #1 (permalink)  
Antiguo 16/03/2010, 12:39
 
Fecha de Ingreso: febrero-2010
Ubicación: Santiago
Mensajes: 82
Antigüedad: 14 años, 2 meses
Puntos: 0
Duda con consulta sql

hola esta es mi duda


Resulta que tengo la tabla Padres con los siguientes datos

dad_id dad_nom dad_expe dad_expepro dad_oper dad_gest dad_jefe
1 juan 0 0 1 0 0
2 predro 0 1 0 0 0
3 diego 0 0 1 1 0

Tengo que devolver el dad_nom con el dad_id y ademas

si en dad_expe me aparece un 1 tengo que devolver papa es experto
sino si en dad_expepro = 1 papa es super experto
sino si en dad_oper= 1 papa es un operativo
sino si en dad_gest = 1 papa es gestionador
sino si en dad_jefe = 1 papa es jefe

pero la parte de que papa es ...... tengo que sacarlo de otra tabla Datos
dato_tip = 'papa'
dato_id = 1 dato_nombre = papa es experto
dato_id = 2 dato_nombre = papa es super experto
dato_id = 3 dato_nombre = papa es un operativo
dato_id = 4 dato_nombre = papa es gestionador
dato_id = 5 dato_nombre = papa es jefe


un ejemplo de lo que tengo que mostrar con juan

juan / papa es un operativo
pedro /papa es super experto
diego / papa es un operativo papa papa es gestionador

gracias
  #2 (permalink)  
Antiguo 17/03/2010, 08:56
 
Fecha de Ingreso: marzo-2009
Ubicación: Santa Marta
Mensajes: 73
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Duda con consulta sql

lo que podrias hacer reestructurar la tabla...

por ejemplo...

la tabla padres podria quedar con tres atributos de la siguiente manera..

pk idPadre; nombrePadre; fk tipoActividad

ejemplo datos:

1; pedro; 0
2; pablo; 1
1; pedro; 2
2; pablo; 3

y hacer una segunda tabla que se llame por ejemplo actividades
pk idActividad; nombreActividad

0; Super experto
1; experto
2; Operario
3; Gestionador

pk = primary key
fk = foreign key

de tal manera que la consulta se veria algo como:

Código:
SELECT padres. idPadre, padres.nombrePadre, actividades.nombreActividad
FROM padres
INNER JOIN actividades
ON (padres.tipoActividad = actividades.nombreActividad)
resultado de la consulta:

1; pedro; Super Experto
2; pablo; Experto
1; pedro; Operario
2; pablo; Gestionador
  #3 (permalink)  
Antiguo 17/03/2010, 18:40
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: Duda con consulta sql

Tu segunda tabla es errónea, de hecho está mal estructurada, porque todos los valores para cada caso en tu primer tabla son 1, ya sea para experto, super experto, operativo, etc.

Si quieres usar un catálogo para saber si es experto, super experto, etc, la primera tabla quedaría así:


Tabla: Padres
Dad_id Dad_nom Dad_tipo
1 Juan 2
2 Pedro 1
3 Diego 4


En la segunda tu catálogo como lo tienes:

Tabla: Cat_Tipo
Dad_tipo Dad_tipo_desc
1 Experto
2 Super Experto
3 Operativo
4 Gestionador
5 Jefe


Tu consulta quedaría así:

Select a.dad_nom, (‘papá es un ‘ + b.dad_tipo_desc) as description
From Padres a, Cat_Tipo b
Where a.dad_tipo = b.dad_tipo


Esto te imprimiría, según la información en las tablas de ejemplo:

Juan / papá es un Super Experto
Pedro / papá es un Experto
Diego / papá es un Gestionador


Así es como estructuraría yo las tablas de la BD.

El campo que tienes como dato_tip, no le veo caso, a menos de que sea un identificador para los casos en que se trate de una madre y no un padre. Si fuera así, también crearía un catálogo (tabla) llamado cat_dad_mom que contenga los campos dad_mom_id y dad_mom con los valores 0 y 1 para padre o madre respectivamente; esto para definir si se trata de una madre o un padre; y en la primera tabla (Padres) agregaría una columna llamada dad_mom que contenga los valores 0 o 1. Así ligaría esta tabla a la consulta para imprimir "papá" o "mamá" es un(a)... Ligando esta tabla, tu consulta quedaría así:

Select a.dad_nom, (c.dad_mom + ‘ es un(a) ‘ + b.dad_tipo_desc) as description
From Padres a, Cat_Tipo b, cat_dad_mom c
Where a.dad_tipo = b.dad_tipo And a.dad_mom = c.dad_mom


Espero que esto te sirva y resuelva tu duda.

Saludos!
  #4 (permalink)  
Antiguo 18/03/2010, 09:20
 
Fecha de Ingreso: febrero-2010
Ubicación: Santiago
Mensajes: 82
Antigüedad: 14 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Duda con consulta sql

Gracias por las respuestas
las tablas estan hechas no puedo modificarlas solo pedir datos
da ellas
gracias
  #5 (permalink)  
Antiguo 18/03/2010, 10:32
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: Duda con consulta sql

Pues va a estar complicado relacionar ambas tablas entonces, pues no hay un campo en común para relacionarlas y para que puedas ligar tu texto. Puedes hacerlo directamente haciendo uso de la primera tabla. Sólo así se me ocurre que puede funcionar.
  #6 (permalink)  
Antiguo 18/03/2010, 12:30
danicuco
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con consulta sql

La verdad que no te voy a decir nada nuevo de lo que ya te han comentado... y llevan toda la razon, es imposible relacionar ambas tablas ya que no existe (redundante) relacion entre ellass.. si no entendí mal al final lo que necesitas es alimentar ese BIT o valor 0 1 con su tabla maestra por explicarlo de alguna forma..

mira te dejo un ejemplo de como se me ocurre formar esos valores de resultado... aunque no es una forma muy correcta y la verdad tampoco sé si seria la mejor ya que le tienes que indicar en la propia consulta el id de Datos.

espero que te surjan ideas a partir de ellas

Código:
select p.dad_nom , 
CASE p.dad_expe WHEN 1 THEN (SELECT d.dato_nombre FROM datos d where d.dato_id = 1)  END ,
CASE p.dad_expepro WHEN 1 THEN (SELECT d.dato_nombre FROM datos d where d.dato_id = 2) END, 
CASE p.dad_oper WHEN 1 THEN (SELECT d.dato_nombre FROM datos d where d.dato_id = 3)  END ,
CASE p.dad_gest WHEN 1 THEN (SELECT d.dato_nombre FROM datos d where d.dato_id = 4)  END, 
CASE p.dad_jefe WHEN 1 THEN (SELECT d.dato_nombre FROM datos d where d.dato_id = 5) END 
from Padres p
Mi tabla es esta :

1 juan 1 0 1 0 0
2 pedro 0 1 0 0 1
3 jesus 0 1 1 1 0

Devolveria algo así segun mis datos...

dad_nom 1 2 3 4
juan papa es experto {null} papa es un operativo {null} {null}
pedro {null} papa es super experto {null} {null} {null}
jesus {null} papa es super experto papa es un operativo papa es gestionador {null}

saludos

Última edición por danicuco; 18/03/2010 a las 12:32 Razón: error

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:05.