Ir para o conteúdo
  • 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

Mensagens Recomendadas

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

Editado por homasa
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por homasa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por homasa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.