Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQL inventario (https://www.clubdelphi.com/foros/showthread.php?t=62145)

mjjj 05-12-2008 19:05:46

SQL inventario
 
Hola, ojala me puedan ayudar.

Tengo 2 tablas... bodega e inventarios. La consulta debe devolverme la cantidad de items distintos (en cada bodega) que cumpla con la condicion de que la sumatoria de ingresos, sea mayor que la sumatoria de egresos.

La cosa va algo asi, pero no he podido afinarlo...

Código SQL [-]
SELECT distinct B.ID, b.NOMBRE,
(SELECT COUNT(I.ID) FROM INVENTARIO I WHERE (SELECT COALESCE(SUM(CANTIDAD),0)
FROM inventario WHERE EMPRESA = 'MAT' AND TIPO = 'I' AND BODEGA = B.ID AND ID=I.ID) >
(SELECT COALESCE(SUM(CANTIDAD),0) FROM inventario WHERE EMPRESA = 'MAT'
AND TIPO = 'E' AND BODEGA = B.ID AND ID=I.ID))
FROM  bodega b WHERE B.EMPRESA = 'MAT'
GROUP BY B.ID, B.NOMBRE

Espero que a alguien se le ocurra algo que me funcione....

saludos, y mil gracias

hecospina 05-12-2008 23:05:47

debes ajustar a tu consulta pues no conozco tus tablas

Código SQL [-]
select B.ID,B.NOMBRE,count(I.ID) as cantidad 
from BODEGAS B
LEFT JOIN INVENTARIOS I ON (B.IDPRODUCTO=I.IDE) 
group by B.ID,B.NOMBRE
having sum(iif(TIPO ='I',cantidad,0))<sum(iif(TIPO ='E',cantidad,0));

ten muy presente el Having que es el que evalua que los ingresos sean inferiores a los egresos

Suerte :)

mjjj 06-12-2008 16:55:46

Gracias, estoy trabajando con ello...

otra pregunta: necesito agregar mas condiciones para ambas tablas que es el campo empresa, en que parte tengo que agregarlo??

Muchas gracias por tu tiempo

Saludos

hecospina 06-12-2008 17:01:02

Hola
Las demas condiciones las agregas en el Where, antes de iniciar el group by
Suerte :)

mjjj 08-12-2008 03:19:11

Ok, gracias, ahora se me presento otro poblema, si es que no existe ningún Items que cumpla con la condición, no me aparece ninguna bodega... me gustaría que en ese caso, me arrojara que en la bodega "X" existe 0 items que cumla con esa condicion.

Trate utilizando coalesce, pero no me resulto

Como puedo solucionar eso??

Código SQL [-]
select B.ID,B.NOMBRE,COALESCE(count(DISTINCT I.ID),0) as cantidad
from BODEGA B
LEFT JOIN INVENTARIO I ON (B.ID=I.bodega)
where I.empresa = 'MAT' AND B.EMPRESA = 'MAT'
group by B.ID,B.NOMBRE
having COALESCE(sum(iif(TIPO ='I',cantidad,0)),0)>COALESCE(sum(iif(TIPO ='E',cantidad,0)),0)

Saludos

mjjj 10-12-2008 02:14:16

Hola, voy a simplificar la pregunta, utilizo este codigo para hacer una consulta...

Código SQL [-]
select count(distinct i.id) as items from inventario i
where empresa = 'MAT' AND I.BODEGA = '1'
HAVING sum(iif(I.TIPO ='I',I.cantidad,0)) > sum(iif(I.TIPO ='E' or I.TIPO = 'T' ,I.cantidad,0))

La tabla inventario tiene estos registros.

ID Cantidad Tipo Bodega Empresa
1 5 I 1 MAT
2 2 I 1 MAT
1 5 E 1 MAT

La hacer mi consulta, solo debiera mostrarme que un solo items distinto en la bodega 1 (el ID 2), pero me arroja el resultado del count que existen 2 items distintos que cumplen con la condicion.

Espero que ahora quede mas claro, y me puedan ayudar a dar solucion a mi problema.

Muchas gracias.... Saludos

mjjj 12-12-2008 14:02:44

Hola, alguien me puede ayudar con esto... no he podido solucionarlo, y nececito resolverlo antes posible....


Cualquier idea me sirve...

Gracias

ASAPLTDA 12-12-2008 17:13:29

Cometnario A La Consulta
 
Creo que l amejor forma es partir el probalema en varios pedazos ,me explico
1. crea vistas que totalicen las entradas y salidas + /o menos como esto:
select bodega,fecha, codigo,sum(qty) where el codigo transsaccion = entradas
2. crea vistas que totalicen salidas + /o menos como esto:
select bodega,fecha, codigo,sum(qty) where el codigo transsaccion = salidas
3 o una vista que totalice las entradas sy salidas ejempllo
select compnaia, bodega,codigo, sum(entradas) sum(salidas) group by
bodega,compania,codigo

**********************************
SELECT cono,recurso,tipomov,
CASE
when tipomov = 'E' THEN QTY
ELSE
0
END ENTRADAS ,

CASE
when tipomov = 'S' THEN QTY
ELSE
0
END SALIDAS
FROM inmov m
********************************
YA USANDO LAS VISTA DE PRONTO ES MAS FACIL


La franja horaria es GMT +2. Ahora son las 08:10:26.

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