PostgreSQL - Resultado de consultas nulas

   
Vista:

Resultado de consultas nulas

Publicado por Adrian tfmoreno@liceobrown.edu.ar (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

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder