none
Select con un sumatorio condicionado RRS feed

  • Pregunta

  • Hola,

    Trabajo con SQL Server 2014 y me encuentro con el siguiente problema.

    Tengo la tabla @ventas en mi base de datos:

    DECLARE @Ventas AS TABLE
    (
       IdCliente Int,
       Fecha  Date,
       NumeroAlbaran Int,
       IdFamilia nvarchar(30),
       Importe decimal(15,1)
       
    );
    
    INSERT INTO @Ventas
    VALUES(1,'01/01/2016',1,'A1',24.5),
     (1,'02/01/2016',1,'A2',44.5),
     (1,'02/01/2016',2,'A2',14),
     (2,'03/01/2016',3,'A3',1.5),
     (1,'03/02/2016',4,'A4',32.5),
     (16,'08/05/2016',5,'A1',11.5),
     (16,'08/05/2016',5,'A1',9.24),
     (9,'11/06/2016',6,'A3',8.74),
     (9,'11/06/2016',6,'A2',22.5);

    Pues bien, en este hilo se me indicó una forma de calcular el sumatorio de todos los registros agrupados por mes y año.

    No obstante, de esta forma la cual expongo a continuación se realiza el sumatorio de todos los citados registros.

    select *,
    SUM(Importe) OVER(PARTITION BY MONTH(Fecha),YEAR(Fecha)) AS VentaTotalMes
     from @Ventas

    Mi problema es que ahora necesito realizar este mismo. sumatorio pero solo de las lineas que contengan un valor del campo IdFamilia distinto a A01 o A02. Por tanto el resultado que obtendría sería:

    ¿se os ocurre de qué forma podría hacerlo?

    Muchas gracias

    Angel


    • Editado Angeleci domingo, 28 de agosto de 2016 15:38
    domingo, 28 de agosto de 2016 15:36

Respuestas

  • Angeleci,


    Lo único que necesitas es condicionar la sumatoria:

    SELECT *, SUM(CASE WHEN (IdFamilia NOT IN ('A1', 'A2')) THEN Importe ELSE 0 END) OVER(PARTITION BY MONTH(Fecha), YEAR(Fecha)) AS VentaTotalMes FROM @Ventas


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Angeleci domingo, 28 de agosto de 2016 22:09
    domingo, 28 de agosto de 2016 15:57

Todas las respuestas

  • Angeleci,


    Lo único que necesitas es condicionar la sumatoria:

    SELECT *, SUM(CASE WHEN (IdFamilia NOT IN ('A1', 'A2')) THEN Importe ELSE 0 END) OVER(PARTITION BY MONTH(Fecha), YEAR(Fecha)) AS VentaTotalMes FROM @Ventas


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Angeleci domingo, 28 de agosto de 2016 22:09
    domingo, 28 de agosto de 2016 15:57
  • Gracias Willams.

    Me ha servido tu propuesta.

    Un saludo

    Angel

    domingo, 28 de agosto de 2016 22:10