Resultado de consultas nulas
Publicado por Adrian (5 intervenciones) el 24/06/2015 20:24:45
Buenas, tengo una tabla llamada INASISTENCIAS,
idcadete| fecha | cantidad
-------------------------------------------
200 | 2015-02-22 | 1
201 | 2015-06-15 | 0.5
240 | 2015-03-13 | 1
200 | 2015-03-20 | 1
y otra llamada CADETES,
idcadete| nombre | apellido | matricula
-------------------------------------------------------
200 | juan | perez | 2015001
201 | pedro | losua | 2015002
203 | ramon | chavez | 2015003
240 | oscar | resia | 2015222
Si ejecuto la siguiente consulta, obtengo el resultado anual de inasistencias
idcadete| apellido|cantidad
------------------------------------
200 | perez | 2
201 | pedro | 0.5
203 | ramon | 0
240 | oscar | 1
Si agrego la siguiente linea para filtrar por trimestre donde $trimestre = (3,4,5)
El resultado esta filtrado, pero necesito que los que no tiene inasistencia en ese trimestre den 0.
idcadete| apellido|cantidad
------------------------------------
200 | perez | 1
240 | oscar | 1
le agregue lo siguiente
y me incluyo a los cadetes que en todo el año no tenian registro en la tabla INASISTENCIAS (o sea cadetes que no faltaron en todo el año y por ende no registran en la tabla antes mencionada=
idcadete| apellido|cantidad
------------------------------------
200 | perez | 1
203 | ramon | 0
240 | oscar | 1
Como podria incluir a los que registran inasistencias en otros trimestres|?, obviamente con resultado que exprese 0 si no falto en ese trimestre.
Lo raro es que si no filtro por trimestre con la sentencia EXTRACT , me lista a todos los cadetes con sus respectivas sumas de inasistencia, y si no estan en la tabla inasistencia igual los lista con cantidad 0. Que es lo que yo pretendo pero por trimestre.
Espero haberme explicado. Desde ya muchas gracias!
idcadete| fecha | cantidad
-------------------------------------------
200 | 2015-02-22 | 1
201 | 2015-06-15 | 0.5
240 | 2015-03-13 | 1
200 | 2015-03-20 | 1
y otra llamada CADETES,
idcadete| nombre | apellido | matricula
-------------------------------------------------------
200 | juan | perez | 2015001
201 | pedro | losua | 2015002
203 | ramon | chavez | 2015003
240 | oscar | resia | 2015222
Si ejecuto la siguiente consulta, obtengo el resultado anual de inasistencias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$sSqlAsistencia =
" SELECT
ca.idcadete,
ca.apellido,
coalesce(sum(i.cantidad),0) as cantidad
FROM
cadetes ca,
cursos c,
cursos_cadetes cc
left join inasistencias i on cc.fk_idcurso = i.fk_idcurso and cc.fk_idcadete = i.fk_idcadete
WHERE
c.habilitado = true
and ca.habilitado = true
and c.fk_idanolectivo = ".$aAnoLectivoBuscar."
and c.fk_idano = ".$aAnoBuscar."
and c.fk_iddivision = ".$aDivisionBuscar."
and cc.fk_idcurso = c.idcurso
and cc.fk_idcadete = ca.idcadete
GROUP BY
ca.idcadete
ca.apellido
";
idcadete| apellido|cantidad
------------------------------------
200 | perez | 2
201 | pedro | 0.5
203 | ramon | 0
240 | oscar | 1
Si agrego la siguiente linea para filtrar por trimestre donde $trimestre = (3,4,5)
1
2
3
4
5
6
7
8
9
WHERE
c.habilitado = true
and ca.habilitado = true
and c.fk_idanolectivo = ".$aAnoLectivoBuscar."
and c.fk_idano = ".$aAnoBuscar."
and c.fk_iddivision = ".$aDivisionBuscar."
and cc.fk_idcurso = c.idcurso
and cc.fk_idcadete = ca.idcadete
and EXTRACT(MONTH FROM i.fecha) in ".$trimestre."
El resultado esta filtrado, pero necesito que los que no tiene inasistencia en ese trimestre den 0.
idcadete| apellido|cantidad
------------------------------------
200 | perez | 1
240 | oscar | 1
le agregue lo siguiente
1
and EXTRACT(MONTH FROM i.fecha) in ".$trimestre." or i.cantidad is null)
y me incluyo a los cadetes que en todo el año no tenian registro en la tabla INASISTENCIAS (o sea cadetes que no faltaron en todo el año y por ende no registran en la tabla antes mencionada=
idcadete| apellido|cantidad
------------------------------------
200 | perez | 1
203 | ramon | 0
240 | oscar | 1
Como podria incluir a los que registran inasistencias en otros trimestres|?, obviamente con resultado que exprese 0 si no falto en ese trimestre.
Lo raro es que si no filtro por trimestre con la sentencia EXTRACT , me lista a todos los cadetes con sus respectivas sumas de inasistencia, y si no estan en la tabla inasistencia igual los lista con cantidad 0. Que es lo que yo pretendo pero por trimestre.
Espero haberme explicado. Desde ya muchas gracias!
Valora esta pregunta


0