Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Consulta 3 tablas

Hola, yo denuevo por aca molestado. Espero que me puedan ayudar, ya que llevo mucho rato tratando de resolver esto y no he podido.
Tengo un que realizar una consulta a 3 tablas simultaneamente... productos, detproductos e inv_prod.

La tabla productos contiene un listado de todos los productos de la empresa, contiene los campos descripcion y codigo, con el cual se relaciona.

La tabla detproductos contiene los campos codigo, cantidad e ID; y es la receta para poder generar el producto, es decir, para poder tener disponible un producto codigo = "0001", debo tener disponible (en inventario) la totalidad de los distintos insumos que generan el producto, y ademas con la restriccion de que al campo cantidad, es el que limita cuantos insumos (ID) en particular necesito.

Y por ultimo la tabla inv_prod, es la encargada de registrar todos los movimientos en el inventario, si es tipo I es ingreso; si es tipo E es egreso.

Los movimientos son con respecto a los insumos, no los productos, ya que las sumatoria de distintos insumos, generan un producto... esto lo define la tabla detproducto (es como la receta del producto).

La tabla inv_pro tiene los campos codigo, id, tipo, cantidad


Expongo un codigo que como que quiere funcionar pero va no del todo bien. Ojale me puedan echar una manito.
Código SQL [-]
select DISTINCT P.CODIGO, P.DESCRIPCION,
coalesce(min(trunc(I.CANTIDAD/D.CANTIDAD)),0)
FROM productos P left join (detproductos d
left JOIN INV_PROD I
ON D.EMPRESA = I.EMPRESA AND D.CODIGO = I.CODIGO AND D.ID = I.ID)
on P.EMPRESA = D.EMPRESA and p.codigo = d.codigo
where D.EMPRESA = 'emp1'
and i.id = d.id
GROUP BY P.CODIGO, I.ID, P.DESCRIPCION, D.CANTIDAD
having ((COALESCE(sum(iif(TIPO ='I',I.cantidad,0)),0)
-COALESCE(sum(iif(TIPO ='E',I.cantidad,0)),0)) / D.CANTIDAD >=1)

Cualquier comentario, sugerencia o idea es bienvenida.

Saludos y gracias
Responder Con Cita
  #2  
Antiguo 25-02-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Amigos despuse de mucho probar llegue a un codigo que debe funcionar, pero es muy lento ya que tiene consultas anidadas.

Al tener pocos registros funciona de maravilla, agregen un alto numero de registros y simplemente se tranco el PC. Expongo el codigo.

Código SQL [-]
SELECT DISTINCT D.CODIGO,
COALESCE(MIN((SELECT (SUM(IIF(TIPO='I', cantidad, 0))-(SUM(IIF(TIPO='E',CANTIDAD,0))))
 FROM inv_prod WHERE EMPRESA=D.EMPRESA AND CODIGO=D.CODIGO AND ID = D.ID)/D.CANTIDAD),0)

FROM DETPRODUCTOS D INNER JOIN INV_PROD I ON D.EMPRESA = I.empresa
AND I.ID = D.ID AND I.CODIGO = D.CODIGO
WHERE D.EMPRESA = 'emp1'
GROUP BY D.CODIGO
HAVING (SUM(IIF(I.TIPO='I', I.cantidad, 0))-(SUM(IIF(I.TIPO='E',I.CANTIDAD,0)))) >= 0


Luego, tratando de evitar consultas anuladas, utilice este codigo

Código SQL [-]
SELECT DISTINCT D.CODIGO,
COALESCE(MIN(i.cantidad/d.cantidad),0)
FROM DETPRODUCTOS D INNER JOIN INV_PROD I ON D.EMPRESA = I.empresa
AND I.ID = D.ID AND I.CODIGO = D.CODIGO
WHERE D.EMPRESA = 'emp1'
GROUP BY D.CODIGO
HAVING (SUM(IIF(I.TIPO='I', I.cantidad, 0))-(SUM(IIF(I.TIPO='E',I.CANTIDAD,0)))) >= 0

El resultado fue que para cada registro que cumpla con la condiciones del "having", realiza el cuociente y obtengo un minimo que no es real.

Por ultimo, y creo que de esta manera debiera funcionar, es que llegue a este codigo:

Código SQL [-]
SELECT DISTINCT I.CODIGO,
MIN(SUM(IIF(I.TIPO='I', I.cantidad, 0))-(SUM(IIF(I.TIPO='E',I.CANTIDAD,0))))

FROM INV_PROD I
WHERE I.EMPRESA = 'emp1'
GROUP BY I.CODIGO

es asunto aqui es que me arroja un error...

"SQL error code = -104.
Nested aggregate functions are not allowed."

Bueno eso es lo que me podido sacar en limpio, ojala alguien me pueda ayudar a solucionar este tema que me tiene de loko.

Saludos y muchas gracias de ante mano.
Responder Con Cita
  #3  
Antiguo 22-03-2009
cdac901 cdac901 is offline
Miembro
 
Registrado: feb 2008
Posts: 12
Poder: 0
cdac901 Va por buen camino
El error que te da es porque no puedes utilizar este tipo de sentecias min(sum(i.cantidad)) Chequea la referencia SQL Error 36 de este enlace.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
consulta de dos tablas. digital SQL 4 06-11-2007 20:41:00
Consulta SQL con dos tablas... emeceuy Conexión con bases de datos 2 06-08-2005 07:41:59
consulta de dos tablas tgsistemas SQL 4 15-04-2005 13:25:59
Consulta con dos tablas candido SQL 2 09-08-2004 13:02:07
Consulta SQL con 4 tablas nefy SQL 2 03-05-2004 23:25:22


La franja horaria es GMT +2. Ahora son las 14:01:12.


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