Página 1 de 1

Comando SQL pra rateio

Enviado: 03 Dez 2019 11:28
por JoséQuintas
Qual seria o comando pra fazer isto:

Tenho a tabela de recibos com um CPF.
E tenho uma tabela com rateios de cada CPF para várias pessoas - vários registros.
O objetivo é trazer cada recibo, separando o que vai pra cada pessoa.

recibo 10 10% para antonio
recibo 10 10% para julio
recibo 10 80% para chico

recibo 11 100% para antonio

É como se fosse um do while no primeiro, fazendo um select do segundo e juntando tudo.

Comando SQL pra rateio

Enviado: 03 Dez 2019 12:37
por alxsts
Olá!

A princípio parece simples. Um Join resolverá mas não entendi...

- O total de cada recibo está na tabela "Recibo" ?
- A tabela "Rateio" tem apenas o percentual de cada rateio? Ou já tem o valor correspondente ao percentual?
- O nome do beneficiário está em uma terceira tabela ou na primeira?

Comando SQL pra rateio

Enviado: 03 Dez 2019 13:04
por JoséQuintas
alxsts escreveu:A princípio parece simples. Um Join resolverá mas não entendi...
- O total de cada recibo está na tabela "Recibo" ?
- A tabela "Rateio" tem apenas o percentual de cada rateio? Ou já tem o valor correspondente ao percentual?
- O nome do beneficiário está em uma terceira tabela ou na primeira?
Tabela 1:
RECIBO CPF

Tabela 2:
CPF1 percentual1 nome1
CPF1 percentual2 nome2
CPF1 percentual3 nome3
CPF2 percentual1 nome1
CPF3 percentual1 nome1
CPF3 percentual2 nome2

seria algo como:

SELECT ( select * from rateio ) from RECIBO

preciso do retorno:
recibo1, rateiocpf.nome1
recibo1, rateiocpf.nome2
recibo1, rateiocpf.nome3
recibo2, rateiocpf.nome1
recibo2, rateiocpf.nome2

Comando SQL pra rateio

Enviado: 03 Dez 2019 13:25
por JoséQuintas
Uma situação equivalente:

Tem lá os recibos de pagamento em nome do pai, e vai ser dividido entre os filhos.
a primeira tabela tem os recibos
a segunda tabela tem os pais, os filhos, e os rateios
Vou imprimir cada recibo e cada divisão.

Então cada recibo tem que vir N vezes, a mesma quantidade de filhos do pai que estiver no recibo.

Na hora de imprimir, vai ser recibo, pai, filho, ( recibo * percentual )

Equivalente a isto

Código: Selecionar todos

SELECT recibo
DO WHILE ! recibo->Eof()
   SELECT rateios
   SEEK recibo->CPF
   DO WHILE recibo->cpf == rateios->cpf .AND. ! rateios->eof()
   ? recibo->numero, recibo->Cpf, rateios->percentual, rateios->nome
     SKIP
   ENDDO
   SELECT recibo
   SKIP
ENDDO

Comando SQL pra rateio

Enviado: 03 Dez 2019 16:05
por JoséQuintas
RESOLVIDO.

Não precisa nada diferente.
EU não sabia que o MySQL faz isso sozinho quando o relacionamento retorna mais de um registro.

Quando faz o join com clientes... trás só o cliente ok...
Quando faz o join com rateios... ok... repete o registro várias vezes pra cada rateio.

Agora é só incluir o cálculo no select e pronto.

Comando SQL pra rateio

Enviado: 04 Dez 2019 13:08
por alxsts
Olá!

Que bom que resolveu.
JoséQuintas escreveu:EU não sabia que o MySQL faz isso sozinho quando o relacionamento retorna mais de um registro
Sim, isto é padrão de SQL, em qualquer RDBMS.

Não testei mas acho que o número do recibo deveria existir na tabela dos rateios. Caso contrário, fazendo a junção (join) apenas pelo CPF, pode computar os rateios de 2 recibos (do mesmo CPF) num só. É o caso do "Antonio" no teu exemplo:

recibo 10 10% para antonio
recibo 10 10% para julio
recibo 10 80% para chico

recibo 11 100% para antonio

Comando SQL pra rateio

Enviado: 04 Dez 2019 13:48
por JoséQuintas
alxsts escreveu:Não testei mas acho que o número do recibo deveria existir na tabela dos rateios.
Caso contrário, fazendo a junção (join) apenas pelo CPF, pode computar os rateios de 2 recibos (do mesmo CPF) num só. É o caso do "Antonio" no teu exemplo:
na prática é por dono e imóvel, e o rateio idem.
fez certinho.

INNER JOIN RATEIO ON rateio.dono = recibo.dono and rateio.imovel = recibo.imovel