Problema de lógica para distribuir pedidos em vários fornecedore

10/05/2021

0

Pessoal blz?

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

Rodrigo Conceição

Responder

Post mais votado

11/05/2021


publique a estrutura das tabelas

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

11/05/2021

Rodrigo Conceição

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.
Responder

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.
Responder

11/05/2021

Emerson Nascimento

não entendi como relacionar as tabelas que você apresentou.
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
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar