none
ayuda con query para cierre de mes RRS feed

  • Pregunta

  • buenas tardes estoy trabado en esta query y les pido  ayuda para realizar lo que pretendo 

    en primer lugar les comento lo que pretendo.
    realizar una consulta para saber cuanto es la cantida de  cada producto que ingreso al sistema y la cantida de venta, la cantida de existencia que tengo 

    tengo la tabla entrada_dt cual su estructura es la siguiente nfactura,cod_prod,cantida,punitario,ptotal 

    tengo la tabla salida_dt cual su estructura es la siguiente nsalida,cod_prod,cantida,punitario,ptotal 

    tengo la tabla factura_dt cual su estructura es la siguiente nfactura,cod_prod,cantida,punitario,ptotal

     de esas tres tablas tengo que realizar una consulta para utitizar el resultado 

    este ta es la query q tengo asta el momento pero solo me muestra 4 resultados  y tengo en existencia 7 productos

    los cuales cada producto tiene 2 ingresos, 1 salida,1 factura 

    SELECT entradas_dt.cod_prod,entradas_dt.cantida,entradas_dt.punitario,salidas_dt.cantida,facturas_dt.cantida,existencias.cantida
    FROM entradas_dt INNER JOIN salidas_dt ON entradas_dt.cod_prod=salidas_dt.cod_prod   INNER JOIN facturas_dt ON entradas_dt.cod_prod=facturas_dt.cod_prod  INNER JOIN existencias ON entradas_dt.cod_prod=existencias.cod_prod
    GROUP BY  entradas_dt.cod_prod

    espero que me puedan ayudar a resolver este problema


    fredy_najarro

    domingo, 26 de mayo de 2013 0:05

Respuestas

  • Aquí tienes la consulta.

    WITH E AS ( SELECT cod_prod, SUM(cantida) AS cant_ent, MAX(punitario) AS pent FROM entrada_dt GROUP BY cod_prod ), S AS ( SELECT cod_prod, SUM(cantida) AS cant_salid FROM salidas_dt GROUP BY cod_prod ), F AS ( SELECT cod_prod, SUM(cantida) AS cant_fact FROM facturas_dt   GROUP BY
    cod_prod

    ) SELECT X.cod_prod, E.cant_ent, E.pent, S.cant_salid, F.cant_fact FROM Existencias X LEFT JOIN E ON X.cod_prod = E.cod_prod LEFT JOIN S ON X.cod_prod = S.cod_prod LEFT JOIN F ON X.cod_prod = F.cod_prod

    Pero lógicamente no la he probado porque no nos has dado los scripts de creación de las tablas ni de inserción de datos.

    • Editado Jesús López lunes, 27 de mayo de 2013 12:48
    • Marcado como respuesta fredy_saga miércoles, 29 de mayo de 2013 4:10
    lunes, 27 de mayo de 2013 6:33

Todas las respuestas

  • El problema es que al hacer inner join en lugar de left join estás mostrando solo aquellas que tienen movimientos en las cuatro tablas

    tu join debería ser algo así

    from existencias left join entradas on ...

       left join saldidas on...

       left join facturas on..

    si es que es en existencias donde están todos los productos.

    Si nos pasas un script que incluya un conjunto de datos, podemos construirte el query. 

    En este link puedes ver como generar un script que incluya datos.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    domingo, 26 de mayo de 2013 8:12
    Moderador
  • asi como me indicas  e creado la query funciona bien me muestra los datos

    (" SELECT entradas_dt.cod_prod, entradas_dt.cantida AS cat_ent, entradas_dt.punitario AS pent, salidas_dt.cantida AS cant_salid, facturas_dt.cantida AS cant_fact FROM existencias " & _
     " LEFT JOIN entradas_dt ON entradas_dt.cod_prod = existencias.cod_prod " & _
     " LEFT JOIN salidas_dt ON salidas_dt.cod_prod = existencias.cod_prod " & _
     " LEFT JOIN facturas_dt ON facturas_dt.cod_prod = existencias.cod_prod " & _
     "GROUP BY existencias.cod_prod ", conexion)

    pero cuando quiero seralizar la sum de las cantidades me hace mal la suma incrementa los valores el doble 

    asi tengo la query

    (" SELECT entradas_dt.cod_prod, SUM(entradas_dt.cantida) AS cat_ent, MAx(entradas_dt.punitario) AS pent, SUM(salidas_dt.cantida) AS cant_salid, SUM(facturas_dt.cantida) AS cant_fact FROM existencias " & _
     " LEFT JOIN entradas_dt ON entradas_dt.cod_prod = existencias.cod_prod " & _
     " LEFT JOIN salidas_dt ON salidas_dt.cod_prod = existencias.cod_prod " & _
     " LEFT JOIN facturas_dt ON facturas_dt.cod_prod = existencias.cod_prod " & _
     "GROUP BY existencias.cod_prod ", conexion)

    ejemplo 

    elproducto 1 tiene

    2 ingresos las cantidades fueron 4 y 5 

    2 salidas las cantidades fueron 1 y2 

    1factura las cantidades fueron 3

    pero el resultado de la consulta tiene que ser asi

    cant_ingreso = 9, cant_salida =3, cant_factura = 3

    pero me las pone asi 

    cant_ingreso = 18, cant_salida =6, cant_factura = 6


    fredy_najarro

    domingo, 26 de mayo de 2013 17:31
  • eso es normal, sustituye  

    entradas dt_ por  

    entre parentesis, 

    (select cod_prod,sum(cantidad) from entradas_dt group by cod_prod) as entradas_dt

    y así con todas las tablas.  De esta forma no se te duplicarán.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    domingo, 26 de mayo de 2013 21:03
    Moderador
  • eso es normal, sustituye  

    entradas dt_ por  

    entre parentesis, 

    (select cod_prod,sum(cantidad) from entradas_dt group by cod_prod) as entradas_dt

    y así con todas las tablas.  De esta forma no se te duplicarán.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

     creo que no ecomprendido la forma corecta del ejemplo q me estas indicando porque a si lo hago y no muestra nada

    (" (select cod_prod  from entradas_dt group by cod_prod) as entradas_dt_c, " & _
      "(select  SUM(cantida)  from entradas_dt group by cod_prod) as entradas_dt_cant, " & _
      "(select  MAX(punitario)  from entradas_dt group by cod_prod) as entradas_dt_p," & _
      "(select SUM(cantida)  from salidas_dt group by cod_prod) as salidas_dt, " & _
      "(select SUM(cantida) from facturas_dt group by cod_prod) as facturas_dt " & _
      " LEFT JOIN entradas_dt ON entradas_dt.cod_prod = existencias.cod_prod " & _
      " LEFT JOIN salidas_dt ON salidas_dt.cod_prod = existencias.cod_prod " & _
      " LEFT JOIN facturas_dt ON facturas_dt.cod_prod = existencias.cod_prod ", conn)
    pero ahora me asurgido como voy hacer par filtra por fechas los datos cuando las fechas estan en la tabla cabecera de cada tabla

     

    fredy_najarro

    lunes, 27 de mayo de 2013 4:58
  • Aquí tienes la consulta.

    WITH E AS ( SELECT cod_prod, SUM(cantida) AS cant_ent, MAX(punitario) AS pent FROM entrada_dt GROUP BY cod_prod ), S AS ( SELECT cod_prod, SUM(cantida) AS cant_salid FROM salidas_dt GROUP BY cod_prod ), F AS ( SELECT cod_prod, SUM(cantida) AS cant_fact FROM facturas_dt   GROUP BY
    cod_prod

    ) SELECT X.cod_prod, E.cant_ent, E.pent, S.cant_salid, F.cant_fact FROM Existencias X LEFT JOIN E ON X.cod_prod = E.cod_prod LEFT JOIN S ON X.cod_prod = S.cod_prod LEFT JOIN F ON X.cod_prod = F.cod_prod

    Pero lógicamente no la he probado porque no nos has dado los scripts de creación de las tablas ni de inserción de datos.

    • Editado Jesús López lunes, 27 de mayo de 2013 12:48
    • Marcado como respuesta fredy_saga miércoles, 29 de mayo de 2013 4:10
    lunes, 27 de mayo de 2013 6:33