Problema de lógica para distribuir pedidos em vários fornecedore
10/05/2021
0
Estou com seguinte problema, eu tenho uma tabela de pedidos onde tem o CNPJ dos clientes e estados a ser enviado. E uma outra tabela chamada vínculo cliente fornecedor onde cliente diz para qual fornecedor daquele estado preciso mandar, sendo que ele pode ter vários fornecedores em um estado, e ele quer que eu some quantos pedidos eu tenho e distribua igual para todos os fornecedores cadastrado e não tenho ideia de como fazer isso.
Programa feito em Java.
Rodrigo Conceição
Post mais votado
Mais Posts
11/05/2021
Rodrigo Conceição
ID_CLIENTE
CNPJ_FORNECEDOR
API_FORNECEDOR
ID_UF
OUTROS CAMPOS…
TABELA B (PEDIDOS)
CNPJ CLIENTE
UF_QUE SERA ENVIADO O PEDIDOS
OUTROS CAMPOS…
EU PRECISO VARRER A TABELA LÁ E SEPARAR FORNECEDOR POR ESTADO,
DEPOIS EU VOU VARRER A TABELA B E ASSOCIAR OS PEDIDOS PARA OS FORNECEDORES CADASTRADO POR ESTADO
A REGRA É QUE PRECISO DIVIDIR A QUANTIDADE DE PEDIDOS POR IGUAL OU QUASE POR FORNECEDOR
EXEMPLO:
ESTADO :SP
CLIENTE: A1
CLIENTE: A2
CLIENTE A1 TEM
55 PEDIDOS
E TEM 4 FORNECEDORES CADASTRADOS PARA SP
PRECISO PEGAR OS 55 PEDIDOS DISTRIBUIR PARA FICAREM COM QUANTIDADE IGUAL OU PARECIDA
EXEMPLO
FORNECEDOR 1 QTD PEDIDOS 13
FORNECEDOR 1 QTD PEDIDOS 13
FORNECEDOR 1 QTD PEDIDOS 13
FORNECEDOR 1 QTD PEDIDOS 16
ASSOCIO OS PEDIDOS POR FORNECEDOR
DEPOIS VOLTO PARA O SEGUNDO CLIENTE
APÓS TERMINAR, FAÇO O MESMO PROBLEMA PARA OUTRO ESTADO.
11/05/2021
Rodrigo Conceição
publique a estrutura das tabelas
TABELA A (CADASTRO DOS FONERCEDORES POR CLIENTE E ESTADO)
ID_CLIENTE
CNPJ_FORNECEDOR
API_FORNECEDOR
ID_UF
OUTROS CAMPOS…
TABELA B (PEDIDOS)
CNPJ CLIENTE
UF_QUE SERA ENVIADO O PEDIDOS
OUTROS CAMPOS…
EU PRECISO VARRER A TABELA LÁ E SEPARAR FORNECEDOR POR ESTADO,
DEPOIS EU VOU VARRER A TABELA B E ASSOCIAR OS PEDIDOS PARA OS FORNECEDORES CADASTRADO POR ESTADO
A REGRA É QUE PRECISO DIVIDIR A QUANTIDADE DE PEDIDOS POR IGUAL OU QUASE POR FORNECEDOR
EXEMPLO:
ESTADO :SP
CLIENTE: A1
CLIENTE: A2
CLIENTE A1 TEM
55 PEDIDOS
E TEM 4 FORNECEDORES CADASTRADOS PARA SP
PRECISO PEGAR OS 55 PEDIDOS DISTRIBUIR PARA FICAREM COM QUANTIDADE IGUAL OU PARECIDA
EXEMPLO
FORNECEDOR 1 QTD PEDIDOS 13
FORNECEDOR 1 QTD PEDIDOS 13
FORNECEDOR 1 QTD PEDIDOS 13
FORNECEDOR 1 QTD PEDIDOS 16
ASSOCIO OS PEDIDOS POR FORNECEDOR
DEPOIS VOLTO PARA O SEGUNDO CLIENTE
APÓS TERMINAR, FAÇO O MESMO PROBLEMA PARA OUTRO ESTADO.
11/05/2021
Emerson Nascimento
de qualquer modo, segue o que eu fiz:
tabela A
ID_CLIENTE CNPJ_FORNECEDOR API_FORNECEDOR ID_UF ----------- --------------- ---------------------- ----- 1 31 NULL SP 1 32 NULL SP 1 33 NULL SP 1 34 NULL SP 1 45 NULL RJ 1 46 NULL RJ 1 55 NULL BA 1 56 NULL BA 1 57 NULL BA 1 58 NULL BA
tabela B (supondo que cada linha desta tabela represente um pedido)
CNPJ_CLIENTE UF NUM -------------- ---- ----------- 1 SP 1 1 SP 2 1 SP 3 1 SP 4 1 SP 5 1 SP 6 1 SP 7 1 SP 8 1 SP 9 1 SP 10 1 SP 11 1 SP 12 1 SP 13 1 SP 14 1 SP 15 1 SP 16 1 SP 17 1 SP 18 1 SP 19 1 SP 20 1 SP 21 1 SP 22 1 SP 23 1 SP 24 1 SP 25 1 SP 26 1 SP 27 1 SP 28 1 SP 29 1 SP 30 1 SP 31 1 SP 32 1 SP 33 1 SP 34 1 SP 35 1 SP 36 1 SP 37 1 SP 38 1 SP 39 1 SP 40 1 SP 41 1 SP 42 1 SP 43 1 SP 44 1 SP 45 1 SP 46 1 SP 47 1 SP 48 1 SP 49 1 SP 50 1 SP 51 1 SP 52 1 SP 53 1 SP 54 1 SP 55 1 RJ 56 1 RJ 57 1 RJ 58 1 RJ 59 1 RJ 60 1 RJ 61 1 RJ 62 1 RJ 63 1 RJ 64 1 RJ 65 1 BA 66 1 BA 67 1 BA 68 1 BA 69 1 BA 70 1 BA 71 1 BA 72 1 BA 73 1 BA 74
com os dados apresentados temos:
55 pedidos para SP, com 4 fornecedores
10 pedidos para o RJ, com 2 fornecedores
9 pedidos para BA, com 4 fornecedores
instrução SQL (SQL Server)
SELECT CNPJ_CLIENTE, UF, CNPJ_FORNECEDOR, (CASE WHEN ORDEM <> FORNECEDORES THEN NUMPEDIDOS ELSE TOTALPEDIDOS - (NUMPEDIDOS * (ORDEM-1)) END) PEDIDOS FROM ( SELECT P.CNPJ_CLIENTE, P.UF, P.PEDIDOS TOTALPEDIDOS, F.CNPJ_FORNECEDOR, COUNT(F.CNPJ_FORNECEDOR) OVER (PARTITION BY P.CNPJ_CLIENTE, P.UF) FORNECEDORES, CAST( ROUND( P.PEDIDOS / (COUNT(F.CNPJ_FORNECEDOR) OVER (PARTITION BY P.CNPJ_CLIENTE, P.UF)+0.0) ,0) AS INTEGER) NUMPEDIDOS, RANK() OVER (PARTITION BY P.CNPJ_CLIENTE, P.UF ORDER BY P.CNPJ_CLIENTE, P.UF, F.CNPJ_FORNECEDOR) ORDEM FROM ( SELECT CNPJ_CLIENTE, UF, COUNT(UF) PEDIDOS FROM TAB_B GROUP BY CNPJ_CLIENTE, UF ) P INNER JOIN TAB_A F ON F.ID_CLIENTE = P.CNPJ_CLIENTE AND F.ID_UF = P.UF ) TAB
resultado
CNPJ_CLIENTE UF CNPJ_FORNECEDOR PEDIDOS -------------- ---- --------------- -------------------- 1 BA 55 2 1 BA 56 2 1 BA 57 2 1 BA 58 3 1 RJ 45 5 1 RJ 46 5 1 SP 31 14 1 SP 32 14 1 SP 33 14 1 SP 34 13
Clique aqui para fazer login e interagir na Comunidade :)