Cita:
Empezado por darkamerico
Después de mucho padecer, llegue a un sql como el siguiente:
Código SQL [-]SELECT postulante_puntaje.dni, postulante_puntaje.idescuela_fk, postulante_puntaje.puntaje as p1,
(SELECT postulante_puntaje.puntaje
FROM postulante_puntaje
WHERE postulante_puntaje.idexamen_fk = 2 AND
postulante_puntaje.dni = '74360500') as p2,
(SELECT postulante_puntaje.puntaje
FROM postulante_puntaje
WHERE postulante_puntaje.idexamen_fk = 3 AND
postulante_puntaje.dni = '74360500') as p3,
(SELECT postulante_puntaje.puntaje
FROM postulante_puntaje
WHERE postulante_puntaje.idexamen_fk = 4 AND
postulante_puntaje.dni = '74360500') as p4
FROM postulante_puntaje
WHERE postulante_puntaje.idexamen_fk = 1 AND
postulante_puntaje.dni = '74360500'
Quizas no sea la consulta mas inteligente que haya hecho, pero al menos funciona, si hubieran sugerencias para mejorarla, seria muy interesante.
Saludos
|
una forma de simplificar, o por lo menos que sea un poco mas legible esta consulta podría ser esta:
Código SQL
[-]
SELECT p1.dni, p1.idescuela_fk, p1.puntaje as p1, p2.puntaje, p3.puntaje, p4.puntaje
FROM postulante_puntaje p1
LEFT JOIN postulante_puntaje p2 ON p2.idexamen_fk = 2 and p2.dni = p1.dni and p2.idescuela_fk=p1.idescuela_fk
LEFT JOIN postulante_puntaje p3 ON p3.idexamen_fk = 3 and p3.dni = p1.dni and p3.idescuela_fk=p1.idescuela_fk
LEFT JOIN postulante_puntaje p4 ON p4.idexamen_fk = 4 and p4.dni = p1.dni and p4.idescuela_fk=p1.idescuela_fk
WHERE p1.idexamen_fk = 1 AND
p1.dni = '74360500'
En principio si se garantiza que ya están insertadas las cuatro notas, en vez de realizar la agrupación de las tablas con LEFT JOIN se puede realizar con INNER JOIN y la consulta se ejecutara mas rápido en el servidor, pero si no es posible garantizar este punto, entonces se utilizara el LEFT JOIN o de lo contrario no devolverá los resultados que les falte alguna de las notas
saludos