GARANTIR DESCONTO

Fórum Select (duas linhas em uma) #348145

29/10/2007

0

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


Kelly

Kelly

Responder

Posts

29/10/2007

Orc

se der um GROUP BY no cod da materia num resolve ???


Responder

Gostei + 0

30/10/2007

Kelly

pelo menos o teste com group by que fiz nao funcionou nao.

no aguardo ainda...


Responder

Gostei + 0

30/10/2007

George_piaulino

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


Responder

Gostei + 0

30/10/2007

Marcosrocha

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´.


Responder

Gostei + 0

30/10/2007

Aasn

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


Responder

Gostei + 0

30/10/2007

Marcosrocha

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.


Responder

Gostei + 0

30/10/2007

Kelly

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.


Responder

Gostei + 0

30/10/2007

Marcosrocha

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...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar