Hola que tal compañeros escribo esta petición por si me pueden ayudar con una consulta que no puedo hacer funcionar al 100%....
Les comento la situación.
Tengo las siguientes tablas:
1.-Alumnos-------------> (matricula,id_plan)
2.-Historial Academico--> (matricula,id_plan,id_materia,calificaciones)
3.-Materias------------->(id_materia,id_plan,nombre_materia,cuatrimestre,o rden_cuatrimestre,id_cup)
4.-Plan de Estudios----->(id_plan)
La relacion pues cada campo que tienen el mismo nombre
(ojo de la tabla materia el id_cup no es un identificador solo es un dato de la materia, los importantes de la tabla materias son todos menos ese, ese dato solo lo uso para mostrarlo pero no lo uso como identidicador)..:)
Relaciones:
*Un alumno esta inscrito en un plan de estudios
*Un plan de estudios tiene unas materias ordenadas por cuatrimestre asu vez
*Las materias corresponden a un plan (que es lo mismo que la linea anterior pero inverso)
*El historial academico almacena las "calificaciones" por "matricula" (identificador del alumno). y únicamente las que tienen "calificaciones"
Bueno ahora, lo que tengo que realizar
Un query (consulta) que me muestre todas las materias por alumno las que
esten en la tabla de "historial academico" con calificaciones y las que esten en la tabla materias que corresponden a un mismo plan al que pertenece un alumno pero que aun no ha cursado(es decir que no tienen "calificacion")...
En pocas palabras mostrar las calificaciones que tengan calificacion y las que no
pero ordenadas por el cuatrimestre y orden cuatrimestre.
Tengo dos querys los cuales (uní)
y me trae esos registros pero marca errores al aplicar las sentencias de
GROUP BY nombre_materia
ORDER BY cuatrimestre
Este query me trae las que tienen evaluaciones (de la tabla historial academico)
Código:
SELECT c.id_cup,c.nombre_materia,b.calificaciones,c.id_materia
FROM alumnos a,historial_academico b,materias c
WHERE a.matricula=b.matricula
AND a.id_plan=b.id_plan
AND b.id_plan=c.id_plan
AND b.id_materia=c.id_materia
AND a.matricula =300
AND c.orden_cuatrimestre=6
GROUP BY nombre_materia
ORDER BY cuatrimestre
Este otro las que no ha cursado (de la tabla materias)
Código:
SELECT id_cup,nombre_materia,'0',id_materia
FROM materias
WHERE id_materia
NOT IN (SELECT id_materia
FROM historial_academico
WHERE matricula = 300)
AND id_plan=(SELECT a.id_plan
FROM plan_estudios AS a,alumnos AS b
WHERE a.id_plan = b.id_plan AND b.matricula = 300)
AND orden_cuatrimestre=6
GROUP BY nombre_materia
ORDER BY cuatrimestre
Ahora si uso la sentencia UNION si me trae los registros pero no se donde aplicar
las sentencias
GROUP BY nombre_materia
ORDER BY cuatrimestre
Todo lo que me traiga(solo son 8 registros del primer query y 1 registro del segundo query)
Ya unidos pues 9 pero tengo que a agrupar y ordenar los 9 registros por esos campos
o atributos.
aqui les dejo el query en el que uno los dos.....
Código:
(SELECT c.id_cup,c.nombre_materia,b.calificaciones,c.id_materia
FROM alumnos a,historial_academico b,materias c
WHERE a.matricula=b.matricula
AND a.id_plan=b.id_plan
AND b.id_plan=c.id_plan
AND b.id_materia=c.id_materia
AND a.matricula =300
AND c.orden_cuatrimestre=6
GROUP BY nombre_materia
ORDER BY cuatrimestre) UNION (SELECT id_cup,nombre_materia,'0',id_materia
FROM materias
WHERE id_materia
NOT IN (SELECT id_materia
FROM historial_academico
WHERE matricula = 300)
AND id_plan=(SELECT a.id_plan
FROM plan_estudios AS a,alumnos AS b
WHERE a.id_plan = b.id_plan AND b.matricula = 300)
AND orden_cuatrimestre=6
GROUP BY nombre_materia
ORDER BY cuatrimestre)
Saludos por favor si me pueden ayudar se los agradeceria mucho, gracias de antemano..