Select (duas linhas em uma)
alo a todos,
estou fazendo um select so que precisaria que duas linhas
gerasse uma unica, exemplo.
SELECT Matricula,CodMateria,Bimestre, Nota, Faltas FROM Notas
WHERE Matricula = ´107472´
AND AnoLetivo = ´2007´
AND SemLetivo = ´1´
ORDER BY ´CodMateria´, ´Bimestre´
Matricula CodMateria Bimestre Nota Faltas
107472----99192--------1-----------0---------2,5
107472----99192--------2-----------5---------2,5
107472----99193--------1-----------0---------0
107472----99193--------2-----------3---------0
107472----99194--------1-----------0---------0
107472----99194--------2-----------4---------0
o que preciso é:
Matricula CodMateria Bimestre Nota Faltas Bimestre Nota Faltas
107472----99192------1----------0------- 2,5 --- 2 -------- 5 --- 2,5
107472----99193------1----------0------- 0 ----- 2 -------- 3 --- 0
107472----99194------1----------0------- 0 ----- 2 -------- 4 --- 0
ou seja, não aparecer 2 registros mas sim uma com dados na frente com
Bimestre, Nota e Faltas.
agradeço
por enquanto
estou fazendo um select so que precisaria que duas linhas
gerasse uma unica, exemplo.
SELECT Matricula,CodMateria,Bimestre, Nota, Faltas FROM Notas
WHERE Matricula = ´107472´
AND AnoLetivo = ´2007´
AND SemLetivo = ´1´
ORDER BY ´CodMateria´, ´Bimestre´
Matricula CodMateria Bimestre Nota Faltas
107472----99192--------1-----------0---------2,5
107472----99192--------2-----------5---------2,5
107472----99193--------1-----------0---------0
107472----99193--------2-----------3---------0
107472----99194--------1-----------0---------0
107472----99194--------2-----------4---------0
o que preciso é:
Matricula CodMateria Bimestre Nota Faltas Bimestre Nota Faltas
107472----99192------1----------0------- 2,5 --- 2 -------- 5 --- 2,5
107472----99193------1----------0------- 0 ----- 2 -------- 3 --- 0
107472----99194------1----------0------- 0 ----- 2 -------- 4 --- 0
ou seja, não aparecer 2 registros mas sim uma com dados na frente com
Bimestre, Nota e Faltas.
agradeço
por enquanto
Kelly
Curtidas 0
Respostas
Orc
29/10/2007
se der um GROUP BY no cod da materia num resolve ???
GOSTEI 0
Kelly
29/10/2007
pelo menos o teste com group by que fiz nao funcionou nao.
no aguardo ainda...
no aguardo ainda...
GOSTEI 0
George_piaulino
29/10/2007
Utile um select dentro de outro select
Ex.
Select matricula,
(select top 1 bimestre from nota n2 where n2.matricula = n1.matricula and bimestre = 1)
from n2 where ........
com esta dica, vc saberá o que fazer....
A função top 1 é do sql server, caso não seja sql sever o seu banco utilize a função correspondente do seu banco
abraços
Ex.
Select matricula,
(select top 1 bimestre from nota n2 where n2.matricula = n1.matricula and bimestre = 1)
from n2 where ........
com esta dica, vc saberá o que fazer....
A função top 1 é do sql server, caso não seja sql sever o seu banco utilize a função correspondente do seu banco
abraços
GOSTEI 0
Marcosrocha
29/10/2007
Select dentro de select na maioria das vezes resolve o problema mas em grande parte dos casos tem baixo desempenho. A cláusula Group by agrupa dados que dão idênticos aos que mandou agrupar mas se houver apenas 1 dado distinto no resultado, o select acabará duplicando.
Tente, além do Group by, utilizar o distinct ´Select Distinct campos from Tabela´.
Tente, além do Group by, utilizar o distinct ´Select Distinct campos from Tabela´.
GOSTEI 0
Aasn
29/10/2007
Olá mcblade,
a melhor saída para vc é usar select dentro de select, se vc tiver índices bem definidos, não terá tanto problema assim com desempenho.
[]´s
AASN
a melhor saída para vc é usar select dentro de select, se vc tiver índices bem definidos, não terá tanto problema assim com desempenho.
[]´s
AASN
GOSTEI 0
Marcosrocha
29/10/2007
a melhor saída para vc é usar select dentro de select, se vc tiver índices bem definidos, não terá tanto problema assim com desempenho.
Por isso eu uso apenas Joins quando tenho certeza de que há ligação entre as duas tabelas e defino os índices conforme a necessidade. Mas no caso de kelly será impossível agrupar dados distintos (diferentes por exemplo bimestre 1 e 2) sem fazer select dentro de select. Além do mais, ficaria demorado se fosse colocar do jeito sugerido.
o que preciso é:
Matricula CodMateria [color=red:88db6dbf12]Bimestre Nota Faltas[/color:88db6dbf12] [color=blue:88db6dbf12] .... Bimestre Nota Faltas[/color:88db6dbf12]
107472---- 99192---[color=red:88db6dbf12]---1---------- 0------- 2,5 [/color:88db6dbf12]---[color=blue:88db6dbf12] 2 -------- 5 --- 2,5 [/color:88db6dbf12]
107472---- 99193---[color=red:88db6dbf12]---1---------- 0------- 0 ----- [/color:88db6dbf12][color=blue:88db6dbf12]2 -------- 3 --- 0 [/color:88db6dbf12]
107472---- 99194---[color=red:88db6dbf12]---1---------- 0------- 0 ----- [/color:88db6dbf12][color=blue:88db6dbf12]2--------- 4 --- 0[/color:88db6dbf12]
Esse select é possível, mas seria muito demorado.
GOSTEI 0
Kelly
29/10/2007
pessoal cheguei a este resultado, mas não sei se
tem a melhor performance.
Select Notas.Matricula,CodMateria, Disciplina.DescrDiscipl, Bimestre as Bim1,Nota as Nota1, Faltas as Faltas1,
(select top 1 Bimestre from notas n2 where n2.matricula = Notas.matricula and bimestre = ´2´ and n2.CodMateria = Notas.CodMateria) as Bim2,
(select top 1 Nota from notas n2 where n2.matricula = Notas.matricula and bimestre = ´2´ and n2.CodMateria = Notas.CodMateria) ASNotas2,
(select top 1 Faltas from notas n2 where n2.matricula = Notas.matricula and bimestre = ´2´ and n2.CodMateria = Notas.CodMateria) as Faltas2
from notas
INNER JOIN Disciplina
ON Notas.CodMateria = Disciplina.CodDiscipl
WHERE Matricula = ´107472´
AND AnoLetivo = ´2007´
AND SemLetivo = ´1´
AND Bimestre = ´1´
ORDER BY ´CodMateria´
se alguem tiver outra ideia que melhore agradeço.
tem a melhor performance.
Select Notas.Matricula,CodMateria, Disciplina.DescrDiscipl, Bimestre as Bim1,Nota as Nota1, Faltas as Faltas1,
(select top 1 Bimestre from notas n2 where n2.matricula = Notas.matricula and bimestre = ´2´ and n2.CodMateria = Notas.CodMateria) as Bim2,
(select top 1 Nota from notas n2 where n2.matricula = Notas.matricula and bimestre = ´2´ and n2.CodMateria = Notas.CodMateria) ASNotas2,
(select top 1 Faltas from notas n2 where n2.matricula = Notas.matricula and bimestre = ´2´ and n2.CodMateria = Notas.CodMateria) as Faltas2
from notas
INNER JOIN Disciplina
ON Notas.CodMateria = Disciplina.CodDiscipl
WHERE Matricula = ´107472´
AND AnoLetivo = ´2007´
AND SemLetivo = ´1´
AND Bimestre = ´1´
ORDER BY ´CodMateria´
se alguem tiver outra ideia que melhore agradeço.
GOSTEI 0
Marcosrocha
29/10/2007
kelly, eu acredito que com os indices corretos você já ganhe um pouco de velocidade. Você pode também colocar essa SQL numa View para que o banco de dados sempre tenha montado o select, aí você só precisaria dar o select na View e, se necessário, usar o Where para buscar determinado aluno / ano letivo / matéria, etc...
GOSTEI 0