Problema al sacar un promedio entre dos subconsultas(adjunto 2,8 1KB)

28/10/2005 - 01:51 por Matías L | Informe spam
Hola a todos, tengo el siguiente sp, lo que hace es mostrar las notas de un
curso-materia, el promedio de la primera y segunda etapa y un promedio final
El problema es en la columna PromFinal(hecha en base a 2 subconsultas), que
si en alguna de las dos etapas el alumno no tiene notas, el PromFinal
aparece con NULL, lo que quiero es que aparezca
en PromFinal el promedio de la etapa correspondiente.

CREATE PROCEDURE pa_select_notas_por_cur_mat_1y2etapa (@Curso as char(3),
@IdMateria as int) AS
SELECT A.Apellidos+', '+A.Nombres as Alumno,
CASE WHEN N1.IDEtapa = 1 THEN N1.Nota ELSE NULL END AS Nota1Et,
CASE WHEN N1.IDEtapa = 2 THEN N1.Nota ELSE NULL END AS Nota2Et,
CASE WHEN N1.IDEtapa = 1 THEN CONVERT(char(10),N1.FechaExamen,103) ELSE ''
END AS FechaExamen1Et,
CASE WHEN N1.IDEtapa = 2 THEN CONVERT(char(10),N1.FechaExamen,103) ELSE ''
END AS FechaExamen2Et,
E.Descripcion as Etapa, M.Nombre as Materia, N1.Curso,
Prom1Etapa = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDEtapa = N1.IDEtapa AND N2.IDMateria
= N1.IDMateria AND N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1),
Prom2Etapa = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDEtapa = N1.IDEtapa AND N2.IDMateria
= N1.IDMateria AND N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2),
PromFinal = ((SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1)
+
(SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2))/2
FROM NOTAS N1
INNER JOIN Materias M ON N1.IDMateria = M.IDMateria
INNER JOIN Alumnos A ON N1.IDAlumno = A.IDAlumno
INNER JOIN Etapas E ON N1.IDEtapa = E.IDEtapa
WHERE (N1.IDEtapa = 1 or N1.IDEtapa = 2) AND A.Curso = @Curso AND
N1.IdMateria = @IdMateria
ORDER BY A.Apellidos, A.Nombres, N1.IDEtapa

En la consulta se observa que 'JUAN PEREZ' NO posee notas en la segunda
etapa y si en la primera
(omití algunos campos no importantes que figuran en el selet):

Alumno Nota1Et Nota2Et Prom1Etapa Prom1Etapa
PromFinal
JUAN PEREZ 5 NULL 7.0 NULL
NULL
JUAN PEREZ 9 NULL 7.0 NULL
NULL
JUAN PEREZ 7 NULL 7.0 NULL
NULL
JUAN PEREZ 7 NULL 7.0 NULL
NULL
LEON GARCIA 4 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 8 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 10 NULL 8.0 NULL
7.5
LEON GARCIA NULL 5 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5

Lo que me hace falta es:
Alumno Nota1Et Nota2Et Prom1Etapa Prom1Etapa
PromFinal
JUAN PEREZ 5 NULL 7.0 NULL
7.0
JUAN PEREZ 9 NULL 7.0 NULL
7.0
JUAN PEREZ 7 NULL 7.0 NULL
7.0
JUAN PEREZ 7 NULL 7.0 NULL
7.0
LEON GARCIA 4 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 8 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 10 NULL 8.0 NULL
7.5
LEON GARCIA NULL 5 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5

Adjunto en un txt el mensaje, por las dudas las columnas de la consulta se
"amontonen" al verlas por el Outlook
Saludos y mil gracias.
PD: espero se entienda, no soy muy bueno dando explicaciones.
Por las dudas... estructura de la tabla Notas:
CREATE TABLE [dbo].[Notas] (
[IDAlumno] [int] NOT NULL ,
[IDMateria] [smallint] NOT NULL ,
[IDEtapa] [smallint] NOT NULL ,
[Curso] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Orden] [int] IDENTITY (1, 1) NOT NULL ,
[Nota] [smallint] NOT NULL ,
[FechaExamen] [smalldatetime] NULL
) ON [PRIMARY]




begin 666 Consulta de promedios.txt
M#0I#4D5!5$4@4%)/0T5$55)%('!A7W-E;&5C=%]N;W1A<U]P;W)?8W5R7VUA
M=%\Q>3)E=&%P82 H0$-U<G-O(&%S(&-H87(H,RDL($!)9$UA=&5R:6$@87,@
M:6YT*2!!4PT*4T5,14-4($$N07!E;&QI9&]S*R<L("<K02Y.;VUB<F5S(&%S
M($%L=6UN;RP@#0I#05-%(%=(14X@3C$N241%=&%P82 ](#$@5$A%3B!.,2Y.
M;W1A($5,4T4@3E5,3"!%3D0@05,@3F]T83%%="P-"D-!4T4@5TA%3B!.,2Y)
M1$5T87!A(#T@,B!42$5.($XQ+DYO=&$@14Q312!.54Q,($5.1"!!4R!.;W1A
M,D5T+" -"D-!4T4@5TA%3B!.,2Y)1$5T87!A(#T@,2!42$5.($-/3E9%4E0H
M8VAA<B@Q,"DL3C$N1F5C:&%%>&%M96XL,3 S*2!%3%-%("<G($5.1"!!4R!&
M96-H845X86UE;C%%="P-"D-!4T4@5TA%3B!.,2Y)1$5T87!A(#T@,B!42$5.
M($-/3E9%4E0H8VAA<B@Q,"DL3C$N1F5C:&%%>&%M96XL,3 S*2!%3%-%("<G
M($5.1"!!4R!&96-H845X86UE;C)%="P@#0I%+D1E<V-R:7!C:6]N(&%S($5T
M87!A+"!-+DYO;6)R92!A<R!-871E<FEA+"!.,2Y#=7)S;RP@#0H)4')O;3%%
M=&%P82 ]("A314Q%0U0@4D]53D0H059'*$-!4U0H3C(N3F]T82!A<R!&3$]!
M5"DI+#(I#0H)"2 @($923TT@3D]405,@3C(-"@D)(" @5TA%4D4@3C(N0U52
M4T\@/2!.,2Y#55)33R!!3D0@3C(N241%=&%P82 ]($XQ+DE$171A<&$@04Y$
M($XR+DE$36%T97)I82 ]($XQ+DE$36%T97)I82!!3D0@3C(N261!;'5M;F\@
M/2!.,2Y)9$%L=6UN;R!!3D0@3C(N241%=&%P82 ](#$I+ T*"5!R;VTR171A
M<&$@/2 H4T5,14-4(%)/54Y$*$%61RA#05-4*$XR+DYO=&$@87,@1DQ/050I
M*2PR*0T*"0D@("!&4D]-($Y/5$%3($XR#0H)"2 @(%=(15)%($XR+D-54E-/
M(#T@3C$N0U524T\@04Y$($XR+DE$171A<&$@/2!.,2Y)1$5T87!A($%.1"!.
M,BY)1$UA=&5R:6$@/2!.,2Y)1$UA=&5R:6$@04Y$($XR+DED06QU;6YO(#T@
M3C$N261!;'5M;F\@04Y$($XR+DE$171A<&$@/2 R*2P-"@E0<F]M1FEN86P@
M/2 H*%-%3$5#5"!23U5.1"A!5D<H0T%35"A.,BY.;W1A(&%S($9,3T%4*2DL
M,BD-"@D)(" @"4923TT@3D]405,@3C(-"@D)(" @"5=(15)%($XR+D-54E-/
M(#T@3C$N0U524T\@04Y$($XR+DE$36%T97)I82 ]($XQ+DE$36%T97)I82!!
M3D0@3C(N261!;'5M;F\@/2!.,2Y)9$%L=6UN;R!!3D0@3C(N241%=&%P82 ]
M(#$I"0D-"@D)"2L-"@D)"2A314Q%0U0@4D]53D0H059'*$-!4U0H3C(N3F]T
M82!A<R!&3$]!5"DI+#(I#0H)"2 @( E&4D]-($Y/5$%3($XR#0H)"2 @( E7
M2$5212!.,BY#55)33R ]($XQ+D-54E-/($%.1"!.,BY)1$UA=&5R:6$@/2!.
M,2Y)1$UA=&5R:6$@04Y$($XR+DED06QU;6YO(#T@3C$N261!;'5M;F\@04Y$
M($XR+DE$171A<&$@/2 R*2DO,@D)#0I&4D]-($Y/5$%3($XQ#0I)3DY%4B!*
M3TE.($UA=&5R:6%S($T@3TX@3C$N241-871E<FEA(#T@32Y)1$UA=&5R:6$-
M"DE.3D52($I/24X@06QU;6YO<R!!($].($XQ+DE$06QU;6YO(#T@02Y)1$%L
M=6UN;PT*24Y.15(@2D])3B!%=&%P87,@12!/3B @3C$N241%=&%P82 ]($4N
M241%=&%P80T*5TA%4D4@*$XQ+DE$171A<&$@/2 Q(&]R($XQ+DE$171A<&$@
M/2 R*2!!3D0@02Y#=7)S;R ]($!#=7)S;R!!3D0@3C$N261-871E<FEA(#T@
M0$ED36%T97)I82 -"D]21$52($)9($$N07!E;&QI9&]S+"!!+DYO;6)R97,L
M($XQ+DE$171A<&$-"@T*16X@;&$@8V]N<W5L=&$@<V4@;V)S97)V82!Qd@
M)TI504X@4$5215HG($Y/('!O<V5E(&YO=&%S(&5N(&QA('-E9W5N9&$@971A
M<&$@>2!S:2!E;B!L82!P<FEM97)A#0HH;VUI=.T@86QG=6YO<R!C86UP;W,@
M;F\@:6UP;W)T86YT97,@<75E(&9I9W5R86X@96X@96P@<V5L970I.@T*#0I!
M;'5M;F\)"0E.;W1A,45T($YO=&$R170)(%!R;VTQ171A<&$@4')O;3%%=&%P
M82!0<F]M1FEN86P-"DI504X@4$5215H)"34)3E5,3 D)-RXP"4Y53$P)3E5,
M3 T*2E5!3B!015)%6@D).0E.54Q,"0DW+C )3E5,3 E.54Q,#0I*54%.(%!%
M4D5:"0DW"4Y53$P)"3<N, E.54Q,"4Y53$P-"DI504X@4$5215H@"0DW"4Y5
M3$P)"3<N, E.54Q,"4Y53$P-"DQ%3TX@1T%20TE!"0DT"4Y53$P)"3@N, E.
M54Q,"3<N-0T*3$5/3B!'05)#24$)"3D)3E5,3 D)."XP"4Y53$P)-RXU#0I,
M14].($=!4D-)00D). E.54Q,"0DX+C )3E5,3 DW+C4-"DQ%3TX@1T%20TE!
M"0DY"4Y53$P)"3@N, E.54Q,"3<N-0T*3$5/3B!'05)#24$)"3$P"4Y53$P)
M"3@N, E.54Q,"3<N-0T*3$5/3B!'05)#24$)"4Y53$P)-0D@(" @(" @($Y5
M3$P)-RXP"3<N-0T*3$5/3B!'05)#24$)"4Y53$P). D@(" @(" @($Y53$P)
M-RXP"3<N-0T*3$5/3B!'05)#24$)"4Y53$P). D@(" @(" @($Y53$P)-RXP
M"3<N-0T*#0I,;R!Qd@;64@:&%C92!F86QT82!E<SH-"D%L=6UN;PD)"4YO
M=&$Q170@3F]T83)%= D@4')O;3%%=&%P82!0<F]M,45T87!A(%!R;VU&:6YA
M; T*2E5!3B!015)%6@D)-0E.54Q,"0DW+C )3E5,3 DW+C -"DI504X@4$52
M15H)"3D)3E5,3 D)-RXP"4Y53$P)-RXP#0I*54%.(%!%4D5:"0DW"4Y53$P)
M"3<N, E.54Q,"3<N, T*2E5!3B!015)%6B )"3<)3E5,3 D)-RXP"4Y53$P)
M-RXP#0I,14].($=!4D-)00D)- E.54Q,"0DX+C )3E5,3 DW+C4-"DQ%3TX@
M1T%20TE!"0DY"4Y53$P)"3@N, E.54Q,"3<N-0T*3$5/3B!'05)#24$)"3@)
M3E5,3 D)."XP"4Y53$P)-RXU#0I,14].($=!4D-)00D).0E.54Q,"0DX+C )
M3E5,3 DW+C4-"DQ%3TX@1T%20TE!"0DQ, E.54Q,"0DX+C )3E5,3 DW+C4-
M"DQ%3TX@1T%20TE!"0E.54Q,"34)(" @(" @("!.54Q,"3<N, DW+C4-"DQ%
M3TX@1T%20TE!"0E.54Q,"3@)(" @(" @("!.54Q,"3<N, DW+C4-"DQ%3TX@
K1T%20TE!"0E.54Q,"3@)(" @(" @("!.54Q,"3<N, DW+C4-"@T*#0H-"@``
`
end

Preguntas similare

Leer las respuestas

#1 Isaias
28/10/2005 - 02:04 | Informe spam
Con ISNULL()

ISNULL ( check_expression , replacement_value )

Saludos
IIslas


"Matías L" escribió:

Hola a todos, tengo el siguiente sp, lo que hace es mostrar las notas de un
curso-materia, el promedio de la primera y segunda etapa y un promedio final
El problema es en la columna PromFinal(hecha en base a 2 subconsultas), que
si en alguna de las dos etapas el alumno no tiene notas, el PromFinal
aparece con NULL, lo que quiero es que aparezca
en PromFinal el promedio de la etapa correspondiente.

CREATE PROCEDURE pa_select_notas_por_cur_mat_1y2etapa (@Curso as char(3),
@IdMateria as int) AS
SELECT A.Apellidos+', '+A.Nombres as Alumno,
CASE WHEN N1.IDEtapa = 1 THEN N1.Nota ELSE NULL END AS Nota1Et,
CASE WHEN N1.IDEtapa = 2 THEN N1.Nota ELSE NULL END AS Nota2Et,
CASE WHEN N1.IDEtapa = 1 THEN CONVERT(char(10),N1.FechaExamen,103) ELSE ''
END AS FechaExamen1Et,
CASE WHEN N1.IDEtapa = 2 THEN CONVERT(char(10),N1.FechaExamen,103) ELSE ''
END AS FechaExamen2Et,
E.Descripcion as Etapa, M.Nombre as Materia, N1.Curso,
Prom1Etapa = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDEtapa = N1.IDEtapa AND N2.IDMateria
= N1.IDMateria AND N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1),
Prom2Etapa = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDEtapa = N1.IDEtapa AND N2.IDMateria
= N1.IDMateria AND N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2),
PromFinal = ((SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1)
+
(SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2))/2
FROM NOTAS N1
INNER JOIN Materias M ON N1.IDMateria = M.IDMateria
INNER JOIN Alumnos A ON N1.IDAlumno = A.IDAlumno
INNER JOIN Etapas E ON N1.IDEtapa = E.IDEtapa
WHERE (N1.IDEtapa = 1 or N1.IDEtapa = 2) AND A.Curso = @Curso AND
N1.IdMateria = @IdMateria
ORDER BY A.Apellidos, A.Nombres, N1.IDEtapa

En la consulta se observa que 'JUAN PEREZ' NO posee notas en la segunda
etapa y si en la primera
(omití algunos campos no importantes que figuran en el selet):

Alumno Nota1Et Nota2Et Prom1Etapa Prom1Etapa
PromFinal
JUAN PEREZ 5 NULL 7.0 NULL
NULL
JUAN PEREZ 9 NULL 7.0 NULL
NULL
JUAN PEREZ 7 NULL 7.0 NULL
NULL
JUAN PEREZ 7 NULL 7.0 NULL
NULL
LEON GARCIA 4 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 8 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 10 NULL 8.0 NULL
7.5
LEON GARCIA NULL 5 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5

Lo que me hace falta es:
Alumno Nota1Et Nota2Et Prom1Etapa Prom1Etapa
PromFinal
JUAN PEREZ 5 NULL 7.0 NULL
7.0
JUAN PEREZ 9 NULL 7.0 NULL
7.0
JUAN PEREZ 7 NULL 7.0 NULL
7.0
JUAN PEREZ 7 NULL 7.0 NULL
7.0
LEON GARCIA 4 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 8 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 10 NULL 8.0 NULL
7.5
LEON GARCIA NULL 5 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5

Adjunto en un txt el mensaje, por las dudas las columnas de la consulta se
"amontonen" al verlas por el Outlook
Saludos y mil gracias.
PD: espero se entienda, no soy muy bueno dando explicaciones.
Por las dudas... estructura de la tabla Notas:
CREATE TABLE [dbo].[Notas] (
[IDAlumno] [int] NOT NULL ,
[IDMateria] [smallint] NOT NULL ,
[IDEtapa] [smallint] NOT NULL ,
[Curso] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Orden] [int] IDENTITY (1, 1) NOT NULL ,
[Nota] [smallint] NOT NULL ,
[FechaExamen] [smalldatetime] NULL
) ON [PRIMARY]





Respuesta Responder a este mensaje
#2 Matías L
28/10/2005 - 03:27 | Informe spam
Gracias por contestar, pero en que parte o como utilizo el ISNULL en la
subconsulta:

PromFinal = ((SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1 AND DATEPART(yyyy,
N2.FechaExamen) = DATEPART(yyyy, N1.FechaExamen))
+
(SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2 AND DATEPART(yyyy,
N2.FechaExamen) = DATEPART(yyyy, N1.FechaExamen)))/2,

Muchas gracias.
Respuesta Responder a este mensaje
#3 Miguel Egea
31/10/2005 - 13:45 | Informe spam
Creo que tu subconsulta no es necesarioa tal y como la estás planteando.
podrías sacar un solo registro por alumno y materia y no varios como estás
sacando si es que yo he entendido bien tu consulta.

la idea es algo sí (de memoria y sin probar(

Partipos de las notas medias por alumno materia y etapa. (ojo que puede
darte división por cero, aunque es muy fácil de solucionar y no lo hago por
claridad)

Select idalumno,idmateria,
sum( case idEtapa when 1 then nota else 0 end ) /
sum( case idEtapa when 1 then 1 else 0 end ) MediaPrimeraEtapa,
sum( case idEtapa when 2 then nota else 0 end ) /
sum( case idEtapa when 2 then 1 else 0 end ) MediaSegundaEtapa
from notas
group by idalumno,idmateria

Ahora basado en esto puedes obtener el resto de los datos que necesitas, usa
esta si quieres como subconsulta o ve complicandola un poquito más y
añadiendo campos al group by.

Saludos

Miguel Egea
Visita mi web http://www.portalsql.com
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"



"Matías L" wrote in message
news:%
Hola a todos, tengo el siguiente sp, lo que hace es mostrar las notas de
un
curso-materia, el promedio de la primera y segunda etapa y un promedio
final
El problema es en la columna PromFinal(hecha en base a 2 subconsultas),
que
si en alguna de las dos etapas el alumno no tiene notas, el PromFinal
aparece con NULL, lo que quiero es que aparezca
en PromFinal el promedio de la etapa correspondiente.

CREATE PROCEDURE pa_select_notas_por_cur_mat_1y2etapa (@Curso as char(3),
@IdMateria as int) AS
SELECT A.Apellidos+', '+A.Nombres as Alumno,
CASE WHEN N1.IDEtapa = 1 THEN N1.Nota ELSE NULL END AS Nota1Et,
CASE WHEN N1.IDEtapa = 2 THEN N1.Nota ELSE NULL END AS Nota2Et,
CASE WHEN N1.IDEtapa = 1 THEN CONVERT(char(10),N1.FechaExamen,103) ELSE ''
END AS FechaExamen1Et,
CASE WHEN N1.IDEtapa = 2 THEN CONVERT(char(10),N1.FechaExamen,103) ELSE ''
END AS FechaExamen2Et,
E.Descripcion as Etapa, M.Nombre as Materia, N1.Curso,
Prom1Etapa = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDEtapa = N1.IDEtapa AND N2.IDMateria
= N1.IDMateria AND N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1),
Prom2Etapa = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDEtapa = N1.IDEtapa AND N2.IDMateria
= N1.IDMateria AND N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2),
PromFinal = ((SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 1)
+
(SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.CURSO = N1.CURSO AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND N2.IDEtapa = 2))/2
FROM NOTAS N1
INNER JOIN Materias M ON N1.IDMateria = M.IDMateria
INNER JOIN Alumnos A ON N1.IDAlumno = A.IDAlumno
INNER JOIN Etapas E ON N1.IDEtapa = E.IDEtapa
WHERE (N1.IDEtapa = 1 or N1.IDEtapa = 2) AND A.Curso = @Curso AND
N1.IdMateria = @IdMateria
ORDER BY A.Apellidos, A.Nombres, N1.IDEtapa

En la consulta se observa que 'JUAN PEREZ' NO posee notas en la segunda
etapa y si en la primera
(omití algunos campos no importantes que figuran en el selet):

Alumno Nota1Et Nota2Et Prom1Etapa Prom1Etapa
PromFinal
JUAN PEREZ 5 NULL 7.0 NULL
NULL
JUAN PEREZ 9 NULL 7.0 NULL
NULL
JUAN PEREZ 7 NULL 7.0 NULL
NULL
JUAN PEREZ 7 NULL 7.0 NULL
NULL
LEON GARCIA 4 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 8 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 10 NULL 8.0 NULL
7.5
LEON GARCIA NULL 5 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5

Lo que me hace falta es:
Alumno Nota1Et Nota2Et Prom1Etapa Prom1Etapa
PromFinal
JUAN PEREZ 5 NULL 7.0 NULL
7.0
JUAN PEREZ 9 NULL 7.0 NULL
7.0
JUAN PEREZ 7 NULL 7.0 NULL
7.0
JUAN PEREZ 7 NULL 7.0 NULL
7.0
LEON GARCIA 4 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 8 NULL 8.0 NULL
7.5
LEON GARCIA 9 NULL 8.0 NULL
7.5
LEON GARCIA 10 NULL 8.0 NULL
7.5
LEON GARCIA NULL 5 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5
LEON GARCIA NULL 8 NULL 7.0
7.5

Adjunto en un txt el mensaje, por las dudas las columnas de la consulta se
"amontonen" al verlas por el Outlook
Saludos y mil gracias.
PD: espero se entienda, no soy muy bueno dando explicaciones.
Por las dudas... estructura de la tabla Notas:
CREATE TABLE [dbo].[Notas] (
[IDAlumno] [int] NOT NULL ,
[IDMateria] [smallint] NOT NULL ,
[IDEtapa] [smallint] NOT NULL ,
[Curso] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Orden] [int] IDENTITY (1, 1) NOT NULL ,
[Nota] [smallint] NOT NULL ,
[FechaExamen] [smalldatetime] NULL
) ON [PRIMARY]





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida