none
consulta para reporte. RRS feed

  • Pregunta

  • Buenas tardes a todos damas y caballeros. Bueno, como siempre, cada vez que tengo un problema recurro a expertos como ustedes. Les explico.

    Tengo 3 tablas en la bd, las cuales tiene datos que necesito para poder hacer un reporte. En la tabla producto, tengo el código de barras y las unidades existente en bodega, luego, en la tabla, entrada, tengo la fecha en que entro dicho producto y su respectiva cantidad, y finalmente, en la tabla salida, tengo la cantidad de productos que salieron.... acá una imagen.

      necesito hacer una consulta que me obtenga un resultado de este tipo.... (es un ejemplo)...se busca por fecha de ingreso

    producto      cantidad entrante              cantidad saliente                    total                    fecha de entrada

    1                             10                                    5                                 total*                          fecha**

    el total puede variar ya que en un dia pueden entrar productos de un tipo, pero no necesariamente pueden salir ese mismo dia. Se da en caso que entran el 1 de enero y salen el 12 de febrero, por dar un ejemplo...entonces si busco entrada por el 1 de enero la consulta traería lo siguiente....

    producto        cantidad entrante            cantidad saliente               total               fecha

    1                              10                                     0                            10                 01-01-2017

    he estado trabajando en muchas consultas pero nada me llega al resultado..la verdad es que se ve bastante simple pero no he podido dar con la solución....espero que me puedan ayudar estimados. Desde ya muchas gracias por la ayuda siempre brindada..

    Saludos :) 

    viernes, 24 de febrero de 2017 16:11

Respuestas

  • Enrique Aleman,

    Intenta con la siguiente consulta:

    DECLARE @Fecha date = '20170101'; --Colocar una fecha
    
    WITH Entradas AS
    (
        SELECT e.sci_producto, SUM(e.sci_prod_entrada_buenos) AS [Entrada]
        FROM sci_prod_entrada e
        WHERE
    	   e.sci_prod_entrada_fecha >= @Fecha 
    	   AND e.sci_prod_entrada_fecha < DATEADD(DAY, 1, @Fecha)
        GROUP BY e.sci_producto
    ),
    Salidas AS
    (
        SELECT s.sci_producto, SUM(s.sci_prod_salida_cantidad) AS [Salida]
        FROM sci_prod_salida s
        WHERE
    	   s.sci_prod_salida_fecha >= @Fecha 
    	   AND s.sci_prod_salida_fecha < DATEADD(DAY, 1, @Fecha)
        GROUP BY s.sci_producto
    )
    SELECT
        p.sci_producto, e.Entrada, s.Salida, 
        e.Entrada - s.Salida AS [total], @Fecha
    
    FROM
        sci_producto p
        LEFT JOIN Entradas e ON (p.sci_producto = e.sci_producto)
        LEFT JOIN Salidas s ON (p.sci_producto = s.sci_producto)
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta HunchbackMVP viernes, 24 de febrero de 2017 17:26
    • Marcado como respuesta Enrique Aleman viernes, 24 de febrero de 2017 19:36
    viernes, 24 de febrero de 2017 17:08

Todas las respuestas

  • Enrique Aleman,

    Intenta con la siguiente consulta:

    DECLARE @Fecha date = '20170101'; --Colocar una fecha
    
    WITH Entradas AS
    (
        SELECT e.sci_producto, SUM(e.sci_prod_entrada_buenos) AS [Entrada]
        FROM sci_prod_entrada e
        WHERE
    	   e.sci_prod_entrada_fecha >= @Fecha 
    	   AND e.sci_prod_entrada_fecha < DATEADD(DAY, 1, @Fecha)
        GROUP BY e.sci_producto
    ),
    Salidas AS
    (
        SELECT s.sci_producto, SUM(s.sci_prod_salida_cantidad) AS [Salida]
        FROM sci_prod_salida s
        WHERE
    	   s.sci_prod_salida_fecha >= @Fecha 
    	   AND s.sci_prod_salida_fecha < DATEADD(DAY, 1, @Fecha)
        GROUP BY s.sci_producto
    )
    SELECT
        p.sci_producto, e.Entrada, s.Salida, 
        e.Entrada - s.Salida AS [total], @Fecha
    
    FROM
        sci_producto p
        LEFT JOIN Entradas e ON (p.sci_producto = e.sci_producto)
        LEFT JOIN Salidas s ON (p.sci_producto = s.sci_producto)
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta HunchbackMVP viernes, 24 de febrero de 2017 17:26
    • Marcado como respuesta Enrique Aleman viernes, 24 de febrero de 2017 19:36
    viernes, 24 de febrero de 2017 17:08
  • La clave para resolver tu problema esta en hacer las agrupaciones de entrada y salida por separado puesto que un producto dado puede tener entradas y no salidas o viceversa o ninguna actividad en un periodo dado.

    Luego usas la tabla producto buscar el producto indicado y atachar sus entradas y/o salidas marcando esta como la tabla a preservar (outer join).

    El resto lo puedes encontrar en el codigo que puso Willams.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    viernes, 24 de febrero de 2017 17:22
  • Williams....de verdad que me has salvado la vida. te debo una cerveza!!. Muchas gracias por tu tiempo y respuesta. Saludos y gracias nuevamente :)
    viernes, 24 de febrero de 2017 19:37