none
Sumar valores de SQL RRS feed

  • Pregunta

  • Hola tengo la siguiente situación... necesito un reporte de existencias, tengo la tabla movimientos con la siguiente info..

    idMov codbarMov tipoMov cliente fechaMov
    1 101 ENTRADA PT -null- 11/10/2017
    2 101 ENTRADA PT -null- 11/10/2017
    3 101 ENTRADA PT -null- 11/10/2017
    4 101 ENTRADA PT -null- 11/10/2017
    5 101 ENTRADA PT -null- 11/10/2017
    6 101 ENTRADA PT -null- 11/10/2017
    7 101 ENTRADA PT -null- 11/10/2017
    8 101 ENTRADA PT -null- 11/10/2017
    9 101 ENTRADA PT -null- 11/10/2017
    10 101 ENTRADA PT -null- 11/10/2017
    11 101 SALIDA VT -null- 11/10/2017
    12 101 SALIDA VT -null- 11/10/2017
    13 101 SALIDA VT -null- 11/10/2017
    14 101 SALIDA VT -null- 11/10/2017
    15 101 SALIDA VT -null- 11/10/2017
    16 101 BAJA -null- 11/10/2017
    17 101 SALIDA de PR -null- 11/10/2017
    18 101 ENTRADA x REP -null- 11/10/2017
    19 101 SALIDA VT -null- 11/10/2017
    20 101 SALIDA VT -null- 11/10/2017
    21 201 ENTRADA PT -null- 11/10/2017
    22 201 ENTRADA PT -null- 11/10/2017
    23 201 ENTRADA PT -null- 11/10/2017
    24 201 ENTRADA PT -null- 11/10/2017
    25 201 ENTRADA PT -null- 11/10/2017
    26 201 ENTRADA PT -null- 11/10/2017
    27 201 ENTRADA PT -null- 11/10/2017
    28 201 ENTRADA PT -null- 11/10/2017
    29 201 ENTRADA PT -null- 11/10/2017
    30 201 ENTRADA PT -null- 11/10/2017
    31 201 SALIDA VT Oswaldo 11/10/2017
    32 201 SALIDA VT Oswaldo 11/10/2017
    33 201 SALIDA VT Oswaldo 11/10/2017
    34 201 SALIDA VT Oswaldo 11/10/2017
    35 201 SALIDA VT Oswaldo 11/10/2017

    y esta es la tabla Articulo...

    codbar_articulo nombre_articulo modelo_articulo lote_articulo color_articulo tamaño_articulo
    101 BURO CANCUN 123 Nogal KS
    201 TOCADO CANCUN 200 NOGAL KS

    como pueden ver en la tabla solo guardo el codigo del articulo y registro todos los movimientos que este tiene, ahora necesito una consulta que basicamente me diga las existencias, lo mas cerca que e estado es esto:

    select (((SELECT count(movimientos.tipoMov) from movimientos where movimientos.tipoMov="ENTRADA PT") + 
    (SELECT count(movimientos.tipoMov) from movimientos where movimientos.tipoMov="ENTRADA x REP"))-
    ((SELECT count(movimientos.tipoMov) from movimientos where movimientos.tipoMov="SALIDA VT") +
    (SELECT count(movimientos.tipoMov) from movimientos where movimientos.tipoMov="SALIDA de PR") +
    (SELECT count(movimientos.tipoMov) from movimientos where movimientos.tipoMov="BAJA"))) as Saldo, articulo.nombre_articulo as Articulo,
    articulo.modelo_articulo as Modelo, articulo.tamaño_articulo as Tamaño, articulo.color_articulo as Color, articulo.lote_articulo as Lote
    
    from articulo inner join movimientos on articulo.codbar_articulo=movimientos.codbarMov
    group by articulo.lote_articulo

    pero me arroga la siguiente tabla:

    Saldo Articulo Modelo Tamaño Color Lote
    7 BURO CANCUN KS Nogal 123
    7 TOCADO CANCUN KS NOGAL 200

    entonces como puedo rehacer la consulta para que me muestre lo que me debe de mostrar... que los resultados deberian de ser estos:

    Saldo Articulo Modelo Tamaño Color Lote
    2 BURO CANCUN KS Nogal 123
    5 TOCADO CANCUN KS NOGAL 200

    Algun alma caritatva que me ayude... lo agradeceria eternamente...  despues de terminar con esto prometo aprender ENTITY FRAMEWORK con LINQ para resolverme la vida un poco mas simple!!! jajajaja

    jueves, 12 de octubre de 2017 17:42

Respuestas

  • SELECT
        a.nombre_articulo AS Articulo,
        a.modelo_articulo AS Modelo,
        a.tamaño_articulo AS Tamaño,
        a.color_articulo AS Color,
        a.lote_articulo AS Lote,
        SUM(CASE WHEN m.tipoMov IN ('ENTRADA PT', 'ENTRADA x REP') THEN 1 ELSE -1 END) AS Saldo
    FROM 
        articulo a
        INNER JOIN movimientos m ON a.codbar_articulo = m.codbarMov
    GROUP BY a.nombre_articulo, a.modelo_articulo, a.tamaño_articulo, a.color_articulo, a.lote_articulo;
    GO



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Sully Ruiz jueves, 12 de octubre de 2017 19:08
    jueves, 12 de octubre de 2017 18:09
  • ...sólo una duda, si quiero de un articulo en especifico, ¿sólo debo agregar un WHERE a.nombre_Articulo"CABECERA KS" AND a.modelo_articulo="CANCUN" por ejemplo...?

    Si, tal cual lo has descrito.

    • Marcado como respuesta Sully Ruiz jueves, 12 de octubre de 2017 21:01
    jueves, 12 de octubre de 2017 19:37

Todas las respuestas

  • SELECT
        a.nombre_articulo AS Articulo,
        a.modelo_articulo AS Modelo,
        a.tamaño_articulo AS Tamaño,
        a.color_articulo AS Color,
        a.lote_articulo AS Lote,
        SUM(CASE WHEN m.tipoMov IN ('ENTRADA PT', 'ENTRADA x REP') THEN 1 ELSE -1 END) AS Saldo
    FROM 
        articulo a
        INNER JOIN movimientos m ON a.codbar_articulo = m.codbarMov
    GROUP BY a.nombre_articulo, a.modelo_articulo, a.tamaño_articulo, a.color_articulo, a.lote_articulo;
    GO



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Sully Ruiz jueves, 12 de octubre de 2017 19:08
    jueves, 12 de octubre de 2017 18:09
  • Un millon de gracias hermano... solo una duda si quiero de un articulo en especifico solo debo agregar un WHERE a.nombre_Articulo"CABECERA KS" and a.modelo_articulo="CANCUN" por ejemplo...

    probare eso hermano GRACIAS!!!
    jueves, 12 de octubre de 2017 19:14
  • ...sólo una duda, si quiero de un articulo en especifico, ¿sólo debo agregar un WHERE a.nombre_Articulo"CABECERA KS" AND a.modelo_articulo="CANCUN" por ejemplo...?

    Si, tal cual lo has descrito.

    • Marcado como respuesta Sully Ruiz jueves, 12 de octubre de 2017 21:01
    jueves, 12 de octubre de 2017 19:37