Hola a todos; antes que nada aclaro que ya he leido en distintos articulos y
post anteriores e intentado hacer esto de convertir filas
en columnas(usando cursores y sql dinamico) y no lo he logrado, no pretendo
que me resuelvan el 100% de mi problema, pero necesito una mano para
empezar,
no me importa el metodo para lograrlo(cursores, sql dinamico, tablas temp.,
golpe de estado, lo que sea); estoy con sql2000.
Tengo el resultado de la consulta(con columnas resumidas):
Alumno Materia Nota IDEtapa Promedio
JUAN Biologia 6 1 5.5
JUAN Biologia 5 1 5.5
JUAN Biologia 4 2 6
JUAN Biologia 7 2 6
JUAN Historia 8 1 7
JUAN Historia 6 1 7
JUAN Historia 2 2 5
JUAN Historia 9 2 5
JUAN Historia 4 2 5
Y me hace falta de la siguiente forma:
Alumno Materia N1_1 N2_1 N1_2 N2_2 N3_2 Pro_1 Pro_2
JUAN Biologia 6 5 4 7 5.5
6
JUAN Historia 8 6 2 9 4 7
5
donde por ej; N1_1 significa Nota 1 de la etapa 1, N1_2 Nota1 de la etapa 2.
SELECT A.Apellidos+', '+A.Nombres as Alumno, A.Legajo, M.Nombre as Materia,
N1.Nota, N1.IDEtapa, E.Descripcion as Etapa,
N1.Curso,
Promedio = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.IDEtapa = N1.IDEtapa AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND DATEPART(yyyy, N2.FechaExamen) = @Anio)
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.IdAlumno = @IdAlumno AND N1.IDEtapa = 1 AND DATEPART(yyyy,
N1.FechaExamen) = @Anio
UNION
SELECT A.Apellidos+', '+A.Nombres as Alumno, A.Legajo, M.Nombre as Materia,
N1.Nota, N1.IDEtapa, E.Descripcion as Etapa,
N1.Curso,
Promedio = (SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE N2.IDEtapa = N1.IDEtapa AND N2.IDMateria = N1.IDMateria AND
N2.IdAlumno = N1.IdAlumno AND DATEPART(yyyy, N2.FechaExamen) = @Anio)
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.IdAlumno = @IdAlumno AND N1.IDEtapa = 2 AND DATEPART(yyyy,
N1.FechaExamen) = @Anio
Muchas gracias por su tiempo.
PD: por las dudas coloco el script 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]
Leer las respuestas