Problemas com Join

Delphi

11/07/2005

Pessoal estou com o seguinte problema:

Tenho um banco de dados de Alunos. Existe uma tabela de Notas onde os registros sao gravados assim:

=====================================
CodAluno  Ano  Semestre  CodDisciplina  Avaliacao  Nota
=====================================
0001      2005     1           10          1       6,5
0001      2005     1           10          2       7,0
0002      2005     1           10          2       4,0


O problema é que estou usando um join para me retornar os valores assim:

=====================================
CodAluno  Ano  Semestre  CodDisciplina  Nota1  Nota2
=====================================
0001       2005    1             10      6,5    7,0
0002       2005    1             10             4,0

Mas ele não está me retornando desta forma. Se houver as duas avaliações, ele retorna beleza, se a primeira não existir ou a segunda ele não retorna nada, conforme exemplo abaixo:
=====================================
CodAluno  Ano  Semestre  CodDisciplina  Nota1  Nota2
=====================================
0001       2005    1             10      6,5    7,0


O código que eu estou usando é o código abaixo:

 Select * from (Select * from((Select CodAluno as c1,nota as n1,ano as a1, Coddisciplina as d1,Periodo as p1 from notas where avaliacao=1) as t1 left join (Select CodAluno as c2, nota as n2,ano as a2, Coddisciplina as d2, Periodo as p2 from notas where avaliacao=2) t2 on(t1.C1=t2.C2 and t1.a1=t2.a2 and t1.d1=t2.d2 and t1.p1=t2.p2))) as normal  where normal.a1=2005 and normal.p1=1


Alguem poderia me ajudar?
O banco e MS-SQL

Daniel Miranda Cruz


Daniel_mc

Daniel_mc

Curtidas 0

Respostas

Orpolonio

Orpolonio

11/07/2005

1-)Leia sobre o select case....ira resolver seu problema.
2-)Uma SP faz isso tranquilamente e com um desempenho melhor.
3-)Sub-Selects como o q esta usando em uma tabela muito populosa vai matar seu servidor.
4-)Select * não é recomendado, e sim select campo1, campo2 de preferencia o 1 ser a PK e depois seguidos de campos integer, numeric, date e varchar.


GOSTEI 0
POSTAR