Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL con 3 tablas y sub-ordenamiento (https://www.clubdelphi.com/foros/showthread.php?t=61717)

ilichhernandez 19-11-2008 14:52:37

Consulta SQL con 3 tablas y sub-ordenamiento
 
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

Código SQL [-]
 
      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.....

Código SQL [-]
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:

Código SQL [-]
 
   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


La franja horaria es GMT +2. Ahora son las 11:39:58.

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