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:
Saludos por favor si me pueden ayudar se los agradeceria mucho, gracias de antemano.. (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)