Hola gente de esta maravillosa comunidad, una vez más vengo por ayuda y espero que puedan brindármela.
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 originalDECLARE @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 originalDECLARE @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.