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

Java

Banco de Dados

JAVA EE

10/05/2021

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

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

11/05/2021


publique a estrutura das tabelas
GOSTEI 1

Mais Respostas

Rodrigo Conceição

Rodrigo Conceição

10/05/2021

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.
GOSTEI 0
Rodrigo Conceição

Rodrigo Conceição

10/05/2021


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.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

10/05/2021

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
GOSTEI 1
POSTAR