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