none
Numero de articulos por mes RRS feed

  • Pregunta

  • Hola, nuevamente.

    Hace unos días hice una pregunta muy similar a esta, pero ahora varia un poco.

    Tengo un query que me muestra el siguiente resultado:

    Son clientes que compran varios Items en diferentes meses, necesito que me agrupe por cada cliente, cuantos articulos compro por mes, quedando algo así:

    Para sacar los  sumar los registros por meses y poner el mes, alguien de aquí me ayudo con algo asi:

     SELECT CLIENTE, NOMBRE, PRODUCTO,
          SUM(CASE WHEN MES = 1 THEN 1 ELSE 0 END ) AS ENERO,
          SUM(CASE WHEN MES = 2 THEN 1 ELSE 0 END) AS FEBRERO,
          SUM(CASE WHEN MES = 3 THEN 1 ELSE 0 END) AS MARZO

    Pero lo que necesito sumar ahora son los articulos de cada tipo y mostrarlos por mes y cliente.

    Esto es Oracle, pero la lógica es muy similar.

    Gracias

    domingo, 19 de abril de 2020 0:46

Respuestas

  • Hola jaguar17:

    SELECT CLIENTE, NOMBRE, PRODUCTO,
          SUM(CASE WHEN MES = 1 THEN CANTIDAD ELSE 0 END ) AS ENERO,
          SUM(CASE WHEN MES = 2 THEN cantidad ELSE 0 END) AS FEBRERO,
          SUM(CASE WHEN MES = 3 THEN cantidad ELSE 0 END) AS MARZO
    FROM ORIGEN
    GROUP BY CLIENTE, NOMBRE, PRODUCTO

    Entonces en vez de sumar 1 por mes, sumas cantidad por mes.

    martes, 21 de abril de 2020 3:15

Todas las respuestas

  • Hola jaguar17:

    El problema es que no se puede agrupar por tipo, cuando tipo no existe en lo que muestras.

     SELECT CLIENTE, NOMBRE, PRODUCTO, -- ¿TIPO?,
          SUM(CASE WHEN MES = 1 THEN 1 ELSE 0 END ) AS ENERO,
          SUM(CASE WHEN MES = 2 THEN 1 ELSE 0 END) AS FEBRERO,
          SUM(CASE WHEN MES = 3 THEN 1 ELSE 0 END) AS MARZO
    FROM ORIGEN
    GROUP BY CLIENTE, NOMBRE, PRODUCTO, TIPO
    

    domingo, 19 de abril de 2020 4:21
  • A tipo me refería a cada al tipo de producto, es decir Item1 es un tipo, Item2 es otro, perdón por la confusión.
    domingo, 19 de abril de 2020 20:46
  • Hola jaguar17:

    SELECT CLIENTE, NOMBRE, PRODUCTO
          SUM(CASE WHEN MES = 1 THEN 1 ELSE 0 END ) AS ENERO,
          SUM(CASE WHEN MES = 2 THEN 1 ELSE 0 END) AS FEBRERO,
          SUM(CASE WHEN MES = 3 THEN 1 ELSE 0 END) AS MARZO
    FROM ORIGEN
    GROUP BY CLIENTE, NOMBRE, PRODUCTO

    Group by funciona igual en TSQL que en PLSQL

    Group by 

    https://javifer2.wordpress.com/2019/10/04/group-by-quizas-la-clausula-mas-conflictiva/

    https://elbauldelprogramador.com/consulta-de-datos-clausula-group-by/

    lunes, 20 de abril de 2020 4:48
  • Gracias por responder, 

    Pero así me agrupa los registros que encuentra, yo quiero que me sume el número de articulos, es decir, 

    del cliente 1 del item 1 compro 1 articulo en Enero y 3 en marzo, del item2 2 en febrero y así sucesivamente.

    Saludos!

    lunes, 20 de abril de 2020 13:25
  • Hola jaguar17:

    Tendrás que ser mucho más explicito.

    CREATE TABLE ORIGEN (CLIENTE INT, NOMBRE VARCHAR(100), PRODUCTO VARCHAR(100), MES INT)
    GO
    INSERT INTO ORIGEN (CLIENTE, NOMBRE, PRODUCTO, MES)
    VALUES
    (1,'JUAN','ITEM1',1),
    (1,'JUAN','ITEM1',2),
    (1,'JUAN','ITEM1',1),
    (1,'JUAN','ITEM2',1),
    (1,'JUAN','ITEM2',1),
    (1,'JUAN','ITEM3',2),
    (2,'LUIS','ITEM1',1),
    (2,'LUIS','ITEM2',1),
    (2,'LUIS','ITEM1',1),
    (2,'LUIS','ITEM2',3),
    (2,'LUIS','ITEM1',2),
    (3,'PEPE','ITEM1',1);
    
    
    SELECT CLIENTE, NOMBRE, PRODUCTO,
          SUM(CASE WHEN MES = 1 THEN 1 ELSE 0 END ) AS ENERO,
          SUM(CASE WHEN MES = 2 THEN 1 ELSE 0 END) AS FEBRERO,
          SUM(CASE WHEN MES = 3 THEN 1 ELSE 0 END) AS MARZO
    FROM ORIGEN
    GROUP BY CLIENTE, NOMBRE, PRODUCTO

    Salida

    Yo según los registros insertados, veo, que la query hace correctamente lo que indicas.

    ¿Qué es lo que no te encaja, por ejemplo con estos datos?

     

    lunes, 20 de abril de 2020 16:13
  • En el ejemplo falta poner la cantidad de artículos, 

    Con  el ejemplo que tu me pones le agregaría "Cantidad" que yo en el primer post lo definí como artículos, pero sería así: 

    CREATE TABLE ORIGEN (CLIENTE INT, NOMBRE VARCHAR(100), PRODUCTO VARCHAR(100), CANTIDAD INT, MES INT)
    GO
    INSERT INTO ORIGEN (CLIENTE, NOMBRE, PRODUCTO,CANTIDAD, MES)
    VALUES
    (1,'JUAN','ITEM1',5,1),
    (1,'JUAN','ITEM1',2,2),
    (1,'JUAN','ITEM1',4,3),
    (1,'JUAN','ITEM2',1,1),
    (1,'JUAN','ITEM2',1,2),
    (1,'JUAN','ITEM3',1,3),
    (2,'LUIS','ITEM1',2,1),
    (2,'LUIS','ITEM2',2,1),
    (2,'LUIS','ITEM2',2,2),
    (2,'LUIS','ITEM2',3,3),
    (3,'PEPE','ITEM2',4,3);

    Esto significa que Juan compro 5 Item1 en Enero, 2 Item1 en Febrero, 4 Item1 en Marzo..... etc a su vez Luis compro 2 Item1 en Enero, 2 Item2 en Febrero, etc y Pepe compro cuatro Item4 en Marzo, quedando el resultado:

    Espero haberme explicado ahora sí, gracias por el apoyo!

    lunes, 20 de abril de 2020 16:45
  • Hola jaguar17:

    SELECT CLIENTE, NOMBRE, PRODUCTO,
          SUM(CASE WHEN MES = 1 THEN CANTIDAD ELSE 0 END ) AS ENERO,
          SUM(CASE WHEN MES = 2 THEN cantidad ELSE 0 END) AS FEBRERO,
          SUM(CASE WHEN MES = 3 THEN cantidad ELSE 0 END) AS MARZO
    FROM ORIGEN
    GROUP BY CLIENTE, NOMBRE, PRODUCTO

    Entonces en vez de sumar 1 por mes, sumas cantidad por mes.

    martes, 21 de abril de 2020 3:15
  • Muchisimas gracias!
    martes, 21 de abril de 2020 17:36
  • Hola

     

     

    Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

     

    Gracias por usar los foros de MSDN.

     

    Oscar Navarro

    miércoles, 22 de abril de 2020 13:53
    Moderador