Clipper On Line • Ver Tópico - Comando SQL pra rateio

Comando SQL pra rateio

Discussão sobre SQL

Moderador: Moderadores

 

Comando SQL pra rateio

Mensagempor JoséQuintas » 03 Dez 2019 11:28

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL pra rateio

Mensagempor alxsts » 03 Dez 2019 12:37

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?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL pra rateio

Mensagempor JoséQuintas » 03 Dez 2019 13:04

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL pra rateio

Mensagempor JoséQuintas » 03 Dez 2019 13:25

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

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL pra rateio

Mensagempor JoséQuintas » 03 Dez 2019 16:05

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL pra rateio

Mensagempor alxsts » 04 Dez 2019 13:08

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
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL pra rateio

Mensagempor JoséQuintas » 04 Dez 2019 13:48

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro