Teniendo la siguiente tabla
ID_ALUMNO --- Nombre --- Semestre --- Promedio
01 ----------- Juan ------ 1 ---------- 16.74
02 ----------- John ------ 1 ---------- 15.07
03 ----------- Pepe ----- 1 ---------- 14.32
04 ----------- Carlos ---- 1 ---------- 12.29
05 ----------- Cesar ---- 1 ---------- 12.00
06 ----------- Peter ---- 2 ---------- 15.00
07 ----------- Max ---- 2 ---------- 14.00
08 ----------- Jorge ---- 2 ---------- 17.00
...
Quisiera hallar el quinto superior (siendo este el "total de alumnos/5"). Para ello usé la clausula COUNT para saber el número de alumnos de un determinado semestre, para luego dividirlo entre 5.
Ahora quiero mostrar los primeros xxx alumnos que están dentro de este quinto superior
Código SQL:
Ver original
DECLARE @var1 INT SET @var1 = (SELECT COUNT(semestre)/5 FROM Alumno WHERE Alumno.semestre=1) SELECT top (@var1) * FROM Alumno WHERE Alumno.semestre = 1 ORDER BY Promedio DESC
Usando ese código he logrado mostrar los primeros xxx alumnos pero solo del semestre "1", y lo que busco es mostrar también los de "2" semestre, intenté usar la CLAUSULA UNION, pero debido al ORDER BY, no me deja, así que al final realicé lo siguiente:
Código SQL:
Ver original
DECLARE @var1 INT, @var2 INT SET @var1 = (SELECT COUNT(semestre)/5 FROM Alumno WHERE Alumno.semestre=1) SET @var2 = (SELECT COUNT(semestre)/5 FROM Alumno WHERE Alumno.semestre=2) SELECT top (@var1) * FROM Alumno WHERE Alumno.semestre = 1 UNION SELECT top (@var2) * FROM Alumno WHERE Alumno.semestre = 2 ORDER BY Promedio DESC
Pero el resultado no es el que debería, espero puedan ayudarme a encontrar una forma de realizar la consulta que estoy buscando.