PDA

Ver la Versión Completa : Consulta SQL con 3 tablas y sub-ordenamiento


ilichhernandez
19-11-2008, 14:52:37
Estimados, no se si lo que necesito hacer se puede mediante una sentencia SQL, no me queda claro la verdad, si alguien tiene alguna idea le agradeceria me comentara algo al respecto..... el tema es el siguiente.....
tengo 3 tablas
tabla STOCK : campos producto,subproducto,stock
esta tabla mantiene el stock de n productos.
tabla INGRESO: campos ticket,producto,subproducto,pesoneto
esta tabla almacena los movimientos de ingresos de los productos.
tabla EGRESO: campos ticket,producto,subproducto,pesoneto
esta tabla almacena los movimientos de egresos de los productos.

Entonces mi duda apunta a lo siguiente: Es posible realizar una consulta que me muestre el stock y sus respectivos movimientos de ingreso y egreso... osea algo asi...

producto,subproducto
XXXXX,YYYYYY
ingresos,peso
1 100
2 100
3 200
egresos,peso
4 100
5 50
6 50
Y que este resultado lo pueda mostrar en un grid o un informe impreso....
Estoy trabajando en Delphi 2006 con una base de datos ACCESS.
Ojala alguien sepa por donde va la cosa por que no se que hacer a este respecto... saludos a todos.

poliburro
19-11-2008, 15:23:00
Select Stock.Producto, Stock.SubProducto,
isnull(Ingresos.Cuantos,0) As Ingresos, isnull(Ingresos.Peso,0) As PesoIngreso,
isnull(Egresos.Cuantos,0) As Egresos, isnull(Egresos.Peso,0) As PesoEgreso
From Stock As Stock
Left Join (
Select Producto, Subproducto, Count(*) Cuantos, Sum(PesoNeto) Peso
From Ingreso
Group By Producto, Subproducto
) Ingresos
On Stock.Producto = Ingresos.Producto And
Stock.SubProducto = Ingresos.SubProducto
Left Join (
Select Producto, Subproducto, Count(*) Cuantos, Sum(PesoNeto) Peso
From Egreso
Group By Producto, Subproducto
) Egresos
On Stock.Producto = Egresos.Producto And
Stock.SubProducto = Egresos.SubProducto

ilichhernandez
19-11-2008, 15:35:16
voy a probar esto.... creo que no habia visto consulta sql tan compleja ....... gracias... luego comento....

ilichhernandez
19-11-2008, 19:14:51
Simplifique un poco la sintaxis para entender mejor, pero la version completa y esta version que puse me dan error de sintaxis.....


Select Stock.Producto, Stock.SubPro,stock.stock
From Stock
Left Join ( Select Producto, Subpro From Ingreso )
Ingreso On Stock.Producto = Ingreso.cliente And Stock.SubPro = Ingresos.SubPro
Left Join (Select Producto, Subpro From Egreso )
Egreso On Stock.Producto = Egreso.Producto And Stock.SubPro = Egreso.SubPro

poliburro
19-11-2008, 20:35:49
Olvidé que usas access, prueba esto:



Select Datos.Producto, Datos.Subproducto,
Datos.Ingresos, Datos.PesoIngreso,
Egresos.Cuantos As Egresos, Egresos.Peso As PesoEgreso
From (
Select Stock.Producto, Stock.SubProducto,
Ingresos.Cuantos As Ingresos, Ingresos.Peso As PesoIngreso
From Stock As Stock
Left Join (
Select Producto, Subproducto, Count(*) Cuantos, Sum(PesoNeto) Peso
From Ingreso
Group By Producto, Subproducto
) Ingresos
On Stock.Producto = Ingresos.Producto And
Stock.SubProducto = Ingresos.SubProducto
) Datos
Left Join (
Select Producto, Subproducto, Count(*) Cuantos, Sum(PesoNeto) Peso
From Egreso
Group By Producto, Subproducto
) Egresos
On Datos.Producto = Egresos.Producto And
Datos.SubProducto = Egresos.SubProducto




El error que te lanza es por que access no soporta dos joins en un select, debes usar subquerys.

Saludos