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
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Comando SQL pra rateio
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Comando SQL pra rateio
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?
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)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Comando SQL pra rateio
Tabela 1: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?
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Comando SQL pra rateio
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
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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Comando SQL pra rateio
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.
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Comando SQL pra rateio
Olá!
Que bom que resolveu.
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
Que bom que resolveu.
Sim, isto é padrão de SQL, em qualquer RDBMS.JoséQuintas escreveu:EU não sabia que o MySQL faz isso sozinho quando o relacionamento retorna mais de um registro
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)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Comando SQL pra rateio
na prática é por dono e imóvel, e o rateio idem.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:
fez certinho.
INNER JOIN RATEIO ON rateio.dono = recibo.dono and rateio.imovel = recibo.imovel
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/