Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

homasa

[Resolvido] select: mostrar valor unico numa coluna e inner join de varias tabelas

Recommended Posts

homasa

pessoal tenho uma query para mostrar valores de varias tabelas (alunos, disciplinas e professores) e queria que ela retorna-se na primeira coluna apenas o aluno correspondente 1 vez e nas restantes toda a informação:

select distinct ESTU.NOME as [Nome do Aluno], estu.EMAIL, NOME_DISCIPLINA as [Nome da Disciplina], PROF.NOME as [Nome do Professor]
from ESTUDANTE as estu
inner join DISCIPLINA_ESTUDANTE as de
on estu.ID=de.ID_ESTUDANTE
inner join DISCIPLINA as disc
on disc.id=de.ID_DISCIPLINA
inner join PROFESSOR as prof
on prof.id=ID_PROFESSOR
where estu.ID = 3
group by estu.NOME

não percebo mas dá-me erro no email , mas se apagar o email vai dando erro nos campos consecutivos...

como posso corrigir isto para dar por exemplo:

Nome do Aluno Email Nome da disciplina Nome do Professor

Orlando jose jhfjhf@ghfvgh.com fisico-quimica Amilcar andrade

jhfjhf@ghfvgh.com matematica Joao antunes

jhfjhf@ghfvgh.com frances francisca josefa

Edited by homasa
GeSHi

Share this post


Link to post
Share on other sites
jsWizard

select estu.NOME as nome_aluno, estu.EMAIL, disc.NOME_DISCIPLINA as nome_disciplina, prof.NOME as nome_professor
from ESTUDANTE estu
    inner join DISCIPLINA_ESTUDANTE de on (estu.ID = de.ID_ESTUDANTE)
    inner join DISCIPLINA disc on (de.ID_DISCIPLINA = disc.id)
    inner join PROFESSOR prof on (disc.ID_PROFESSOR = prof.id)
where estu.ID = 3

claro que o resultado vai repetir o nome do aluno e email se ele tiver associado a mais do que uma disciplina.. isso é normal.

Share this post


Link to post
Share on other sites
homasa

Boas jsWizard

obrigado, eu sei que ele funciona assim mas

- é possível o resultado como eu pretendo(sem repetir o nome do aluno....)????

Nome do Aluno Email Nome da disciplina Nome do Professor

Orlando jose jhfjhf@ghfvgh.com fisico-quimica Amilcar andrade

jhfjhf@ghfvgh.com matematica Joao antunes

jhfjhf@ghfvgh.com frances francisca josefa

Edited by homasa

Share this post


Link to post
Share on other sites
homasa

olá. já consegui a resolver num outro lugar, fica aqui a resposta se alguém precisar:

with CTE_R as
(
select
 ESTU.NOME as [Nome do Aluno],
 estu.EMAIL,
 NOME_DISCIPLINA as [Nome da Disciplina],
 PROF.NOME as [Nome do Professor],
 ROW_NUMBER() OVER(PARTITION BY ESTU.NOME, ESTU.EMAIL ORDER BY NOME_DISCIPLINA) as RowNum
from ESTUDANTE as estu
inner join DISCIPLINA_ESTUDANTE as de
 on estu.ID=de.ID_ESTUDANTE
inner join DISCIPLINA as disc
 on disc.id=de.ID_DISCIPLINA
inner join PROFESSOR as prof
 on prof.id=ID_PROFESSOR
where estu.ID = 3
)
select
case when RowNum = 1 then [Nome do Aluno] else '' end as [Nome do Aluno],
case when RowNum = 1 then Email else '' end as Email,
[Nome da Disciplina],
[Nome do Professor]
from CTE_R

em vez dos espaços em branco aparece NULL ;) sugestão colocar no case um else '' , muito bom ficam espaços em branco exactamente como eu quero.

Obrigado também a quem me alterou o primeiro post e colocou entre code's :) gmp i presume

Edited by homasa

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.