Boa tarde.

Veja se o código abaixo te ajuda...

 

create temp table responsavel(id int, cpf bigint, nome varchar(50));

 

create temp table aluno(id int, nome varchar(50), idresp1 int, idresp2 int, 
indRespfin smallint);

 

insert into responsavel(id, cpf, nome)

               values   (1,11122233344499, 'jose da silva'), 

                              (2,22233344455599, 'amelia santana'),

                              (3,33344455566699, 'arnaldo almeida'),

                              (4,44455566677799, 'maria santos');

 

 

insert into aluno(id, nome, idresp1, idresp2, indrespfin)

               values  (1, 'jose ricardo silva', 1, 2, 1),

                              (2, 'cintia silva', 1, 2, 1),

                              (3, 'ana almeida', 3, 4, 2),

                              (4, 'juliana almeida', 3, 4, 2),

                              (5, 'cristina almeida', 3, 4, 2),

                              (6, 'cristina almeida', null, null, null),

                              (7, 'cristina almeida', null, null, null);

 

select  al.id as idAluno,

               al.nome as nomeAluno,

               (case when al.indrespfin = 1 then re1.nome 

                     when al.indrespfin = 2 then re2.nome 

                     else 'Sem responsável financeiro' end) as nomeRespFin,

               (case when al.indrespfin = 1 then re1.cpf 

                     when al.indrespfin = 2 then re2.cpf 

                     else null end) as cpfRespFin

               from aluno al

                              left outer join responsavel re1

                                            on re1.id = al.idresp1

                              left outer join responsavel re2

                                            on re2.id = al.idresp2;

 

--drop table aluno;

--drop table responsavel;

 

Att,

Ricardo Corrales 

ENGSOLUTIONS INFORMÁTICA LTDA

Fábrica de Software:

Rua Couto Magalhães, 1457 - Centro - Franca/SP

(16) 3409-9514 / 3409-9513 

Skype: ricorrales

Cel: (16) 99200-5113

rica...@engsolutions.com.br

"Para ter sucesso é necessário amar de verdade o que se faz!"

 

-----Mensagem original-----
De: pgbr-geral [mailto:pgbr-geral-boun...@listas.postgresql.org.br] Em nome de 
Stclara
Enviada em: quarta-feira, 21 de outubro de 2015 11:26
Para: pgbr-geral@listas.postgresql.org.br
Assunto: [pgbr-geral] Junção de tabelas com condição

 

Salve, pessoal.

Tenho a seguinte situação em um banco que peguei para manutenção:

- Tabela aluno - nesta tabela tenho um campo que diz quem é o responsável 
financeiro.

- Responsavel1;

- Responsavel2;

 

Tem uma consulta para gerar um contrato que pega os dados do aluno,

responsavel1 e responsavel2 e mais o responsável financeiro que devido ao 
grande número de dados esta muito lenta.

Aí pensei em criar uma view para tentar agilizar a pesquisa. Só que precisaria 
algo assim: select * from alunos join responsavel1 join

responsavel2 (case, if) aluno.responsavelfinan = 1 select nome.res1 as 
nome_fin, cpf.res1 as cpf_fin (case, if) aluno.responsavelfinan = 2 select 
nome.res2 as nome_fin,

cpf.res2 as cpf_fin

 

Isto é possivel?

 

 

[]´s

 

 

Stclara

_______________________________________________

pgbr-geral mailing list

 <mailto:pgbr-geral@listas.postgresql.org.br> 
pgbr-geral@listas.postgresql.org.br

 <https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral> 
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a