Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/07/2010, 21:25
Avatar de Killerx_8937
Killerx_8937
 
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 17 años, 5 meses
Puntos: 0
Exclamación Respuesta: Consulta con if anidados

gnzsoloyo, te explico aver si puedes orientarme.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes dos problemas:
1) Tantos IFs anidados resultan muy difíciles de seguir o de resolver desde el punto de vista lógico. Es muy probable que una serie de subconsultas pudiera darte el mismo resultado sin tener que complicar la lógica de la misma.
De hecho, es muy difícil, a simple vista y sin una prueba de escritorio, estar seguros de qué es lo que estás intentando plantear con esos IFs.
2) Esos IFs en el WHERE no guardan ninguna conexión con el resto de las condiciones del mismo. De hecho ni siquiera están conectados por un operador lógico, por lo que es muy probable que te esté dando un error de sintaxis.
Tengo 2 tablas una se llama Inventario y la otra controles, en inventario tengo la descripción del equipo y en controles la información delos controles realizados Calibración, verificación y mantención los cuales tienen un periodo de duración

tengo que confeccionar una consulta para evaluar cada equipo del inventario si sus controles están al día en la tabla inventario esta la información de que controles aplican a cada uno de ellos, en la tabla controles esta el historial de cada uno de los controles por equipo:

CREATE TABLE IF NOT EXISTS `Inventario` (
`Id` int(255) NOT NULL auto_increment,
`Equipo` varchar(255) collate utf8_spanish_ci default NULL,
`Marca` varchar(255) collate utf8_spanish_ci default 'Sin Marca',
`Proveedor` varchar(255) collate utf8_spanish_ci default NULL,
`FechaRecepcion` date default NULL,
`FechaInicio` date default NULL,
`CodigoInterno` varchar(255) collate utf8_spanish_ci default NULL,
`CodArea` varchar(1) collate utf8_spanish_ci NOT NULL,
`CodEquip` int(255) NOT NULL,
`CodAcc` int(255) NOT NULL,
`Rango` varchar(255) collate utf8_spanish_ci default 'Sin Rango',
`Resolucion` varchar(255) collate utf8_spanish_ci default 'Sin Resolucion',
`SeVerifica` varchar(255) collate utf8_spanish_ci NOT NULL,
`SeCalibra` varchar(255) collate utf8_spanish_ci NOT NULL,
`SeMantiene` varchar(255) collate utf8_spanish_ci NOT NULL,
`PerVer` varchar(255) collate utf8_spanish_ci default NULL,
`PerCal` varchar(255) collate utf8_spanish_ci default NULL,
`PerMan` varchar(255) collate utf8_spanish_ci NOT NULL,
`Ubicacion` varchar(255) collate utf8_spanish_ci default NULL,
`RangoCal` varchar(255) collate utf8_spanish_ci default NULL,
`RangoVer` varchar(255) collate utf8_spanish_ci NOT NULL,
`Responsable` varchar(255) collate utf8_spanish_ci default NULL,
`Estado` varchar(255) collate utf8_spanish_ci NOT NULL,
`FechaEstado` date NOT NULL,
`AreaAsignada` varchar(255) collate utf8_spanish_ci NOT NULL,
`Observaciones` varchar(255) collate utf8_spanish_ci default NULL,
`ObservacionesEstado` varchar(255) collate utf8_spanish_ci NOT NULL,
`EstadoDesp` varchar(255) collate utf8_spanish_ci NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=0;


CREATE TABLE IF NOT EXISTS `Controles` (
`Id` int(4) NOT NULL auto_increment,
`CodigoInterno` varchar(100) collate utf8_spanish_ci default NULL,
`Intervalo` varchar(100) collate utf8_spanish_ci default NULL,
`CertificadoN` varchar(100) collate utf8_spanish_ci default NULL,
`CertDesde` date default NULL,
`CertHasta` date default NULL,
`Ultima` varchar(255) collate utf8_spanish_ci default NULL,
`SelloN` varchar(100) collate utf8_spanish_ci default NULL,
`Proveedor` varchar(100) collate utf8_spanish_ci default NULL,
`Control` varchar(255) collate utf8_spanish_ci NOT NULL,
`Conforme` varchar(2) collate utf8_spanish_ci NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=0;

la consulta deberia evaluar para cada equipo los campos SeCalibra,SeVerifica,SeMantiene, con las siguientes posibilidades:
  1. Cal-Ver-Man
  2. Cal-Ver
  3. Ver-Man
  4. Cal-Man
  5. Cal
  6. ver
  7. Man
  8. --- --- ---

luego buscar en la tabla controles si los controles que aplican a el están al día




Creo que seria algo Asi, de todas maneras si alguien tiene alguna otra idea.



Código:

SELECT * FROM Inventario AS A, Controles AS B WHERE A.CodigoInterno=B.CodigoInterno AND B.Ultima='1' AND  IF(A.SeCalibra='Si',IF(DATEDIFF(B.CertHAsta,CURDATE())>0 AND IF(...........
Si Alguien tiene alguna idea de como hacerlo ya que habia intentado con la consulta con la que hbri el tema. ayuda gente mas experimentada..



Gracias......Perrines