none
Query Para agrupación RRS feed

  • Pregunta

  • Buen día a todos :), 

    Tengo el siguiente problema, tengo una tabla mas o menos con la siguiente estructura.

    CREATE TABLE #Clientes(id int, solicitudes int)

    INSERT INTO #Clientes 
    VALUES(1,7),
    (2,2),
    (3,6),
    (4,1),
    (5,3),
    (6,1),
    (7,2),
    (8,5),
    (9,3),
    (10,1)

    Y necesito realizar una división de estos clientes en un número determinado de grupos según un número de solicitudes dado, por ejemplo, si tengo que dividirlos en 4 grupos de clientes que su conteo sume al menos 7 solicitudes (pueden darse el caso de que sean más solicitudes por grupo o menos cualquiera de los 2 escenarios por el tema de los impares o que no se complete un grupo con los clientes restantes)

    Dando algo como resultado algo parecido a lo siguiente. 

    GRUPO 1 (IDCLIENTE 1 , 7 Solicitudes)

    GRUPO 2 (IDCLIENTE 2 , 2 Solicitudes, IDCLIENTE 8, 5 Solicitudes)

    GRUPO 3 (IDCLIENTE 3 , 6 Solicitudes, IDCLIENTE 4, 1 Solicitudes)

    GRUPO 4 (IDCLIENTE 5, 3 Solicitudes, IDCLIENTE 6, 1 Solicitudes, IDCLIENTE 7, 2 Solicitudes, IDCLIENTE 9, 1 Solicitud, IDCLIENTE 10, 1 Solicitud)

    La verdad ya tengo rato buscando y pensando una solución y lo que más se acerca es realizarlo con un CURSOR e ir sumando sumando las solicitudes por cliente y así irlo asignando, pero no creo que sea la opción más rápida y eficaz. 

    Saludos y gracias de antemano

      

    miércoles, 6 de marzo de 2019 18:39

Todas las respuestas

  • Perdón, lo leí 5 VECES y no comprendo que es lo que necesita

    IIslas Master Consultant SQL Server

    miércoles, 6 de marzo de 2019 18:56
  • Usa una expresion CASE para asignar el grupo.

    select
        case
        when idcliente in (1) then 1 
        when idcliente in (2, 8) then 2
        when idcliente in (3, 4) then 3
        when idcliente in (5, 6, 7, 9, 10) then 4
        else 5
        end as grupo, idcliente, solicitudes
    from
       #Clientes
    order by grupo, idcliente;


    AMB

    Some guidelines for posting questions...

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

    • Propuesto como respuesta Pedro Alfaro miércoles, 6 de marzo de 2019 23:42
    miércoles, 6 de marzo de 2019 19:10
  • Ah que caray, jeje si es complejo o no me se dar a explicar sorry.. Basicamente un query para agrupar clientes por grupos sumando sus solicitudes, como en el ejemplo 4 Grupos de clientes que sumadas sus solicitudes sean 7(+/-).

    Digamos que en el resultado del query saldria asi. (donde id es el id de la tabla #Clientes)

    id idgrupo
    1 1
    2 2
    8 2
    3 3
    4 3
    5 4
    6 4
    7 4
    9 4
    10 4

    En mi caso ya practico, es que tengo  un numero de x de hilos que realizaran x numero de compras de solicitudes, el tema es que en estos hilos no deben mezclarse clientes.. osea si en el hilo 1 estoy comprando las solicitudes del idcliente 1, en el hilo 2 no puedo enviar solicitudes del mismo cliente,  y no puedo enviar 1 hilo por cliente ya que el numero de hilos esta parametrizado es por ello que necesito agrupar por numero de solicitudes, en el ejemplo tomo el total de solicitudes que serian 31 y el numero de hilos que serian 4 entonces 31/4 = 7... es por ello que en mi ejemplo feo en los primero 3 grupos si suma el campo solicitudes da 7 y en el ultimo 8 por que el total de solicitudes es impar. 

    No se si me di a entender peor o mejor :(.. igual si tengo mucha tristeza por que no se entiende.


     
    miércoles, 6 de marzo de 2019 19:20
  • Usa una expresion CASE para asignar el grupo.

    select
        case
        when idcliente in (1) then 1 
        when idcliente in (2, 8) then 2
        when idcliente in (3, 4) then 3
        when idcliente in (5, 6, 7, 9, 10) then 4
        else 5
        end as grupo, idcliente, solicitudes
    from
       #Clientes
    order by grupo, idcliente;


    AMB

    Some guidelines for posting questions...

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

    Gracias por la respuesta :) , pero bueno mi ejemplillo el output fue algo que me imnagine saldria, enrealidad mi tabla cuenta con mas clientes y numero de solicitudes diferentes y en cada caso donde use este proceso seria distintas las cantidades :(. 
    miércoles, 6 de marzo de 2019 19:27
  • Si no tienes una logica que podamos usar entonces sera muy dificil automatizar la idea.

    La expresion CASE puede basarse en rango de solicitudes, numero de clientes, etc.


    AMB

    Some guidelines for posting questions...

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

    • Propuesto como respuesta Pedro Alfaro miércoles, 6 de marzo de 2019 23:42
    miércoles, 6 de marzo de 2019 19:49
  • Deleted
    • Propuesto como respuesta Pedro Alfaro miércoles, 6 de marzo de 2019 23:42
    miércoles, 6 de marzo de 2019 21:13