PostgreSQL - Combinar dos resultados (2 consultas SQL)

 
Vista:

Combinar dos resultados (2 consultas SQL)

Publicado por Adrian (5 intervenciones) el 19/06/2015 05:17:54
Buenas, necesito ayuda con la union en un solo array de dos consultas:

En una consulta logro relacionar las inasistencias de alumnos en un trimestre:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$sSqlAsistencia =
	" SELECT
		ca.idcadete,					
		coalesce(sum(i.cantidad),0) as cantidad
		
	FROM 
		cadetes ca,
		cursos c,
		cursos_cadetes cc
		left join inasistencias i on i.fk_idcurso = cc.fk_idcurso and i.fk_idcadete = cc.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
		and (EXTRACT(MONTH FROM i.fecha)  in ".$trimestre ." or i.cantidad is null)
		
	GROUP BY
		ca.idcadete
		
	";
$sSqlInasistencia = $oDB->Query($sSqlAsistencia);

1
2
3
4
5
idcadete | cantidad
--------------------------
203         |   4
305         |   0
120         |   10

Luego en una parte del codigo tengo como resultado a un alumno/cadete con premio por cumplir con otras consultas:

1
2
3
4
5
6
7
8
9
10
$sSql = " SELECT idcadete, nombre, apellido, matricula
 			 FROM cadetes
			WHERE idcadete in
			(" . $sSqlPromedioEnCadaMateria . " INTERSECT " . $sSqlPromedioConducta;
			if (strlen($aPromedioGeneralEdFisicaMayorABuscar)) {
			  $sSql .= " INTERSECT " . $sSqlPromedioEnEdFisica;
			}
 
  $sSql .=	")";`
		$rsCadetesConPremio=$oDB->query($sSql);

1
2
3
idcadete| nombre | apellido | matricula
----------------------------------------------------
203         | adrian   | perez     | 212121

Trate de unir ambas consultas con INNER JOIN pero me tira error, como deberia manejar ambas consultas para combinarlas asi:

1
2
3
$premio = " SELECT a.idcadete, a.nombre, a.apellido, a.matricula, b.cantidad
            FROM ".$rsCadetesConPremio."a inner join ".$sSqlInasistencia."b on a.idcadete = b.idcadete
			ORDER BY a.idcadete";
----ERROR-------

NECESITO LO SIGUIENTE:

1
2
3
idcadete| nombre | apellido | matricula| cantidad
-----------------------------------------------------------------`
203     | adrian   | perez     | 212121   |     4
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
sin imagen de perfil
Val: 14
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Combinar dos resultados (2 consultas SQL)

Publicado por Rafael (21 intervenciones) el 19/06/2015 10:05:52
Creo te lias demasiado ...

A ver no seria mas facil una sola consulta similar a esto ???

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$sSqlAsistencia =
" SELECT
ca.idcadete,
ca.nombre, ca.apellido, ca.matricula
coalesce(sum(i.cantidad),0) as cantidad
FROM
cadetes ca,
cursos c,
cursos_cadetes cc
left join inasistencias i on i.fk_idcurso = cc.fk_idcurso and i.fk_idcadete = cc.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
and (EXTRACT(MONTH FROM i.fecha) in ".$trimestre ." or i.cantidad is null)
and ca.idcadete in (" . $sSqlPromedioEnCadaMateria . " INTERSECT " . $sSqlPromedioConducta;
 
if (strlen($aPromedioGeneralEdFisicaMayorABuscar)) {
$sSqlAsistencia .= " INTERSECT " . $sSqlPromedioEnEdFisica;
}
 
$sSqlAsistencia .= ")
GROUP BY
ca.idcadete
";

Nos cuentas???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Combinar dos resultados (2 consultas SQL)

Publicado por Adrian (5 intervenciones) el 19/06/2015 20:24:36
Definitivamente sos un genio!...Muchas gracias por la celeridad en la respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Combinar dos resultados (2 consultas SQL)

Publicado por Adrian (5 intervenciones) el 21/06/2015 05:36:14
El codigo funciona excelentemente, ahora por que cuando no esta la linea
1
and (EXTRACT(MONTH FROM i.fecha) in ".$trimestre ." or i.cantidad is null)
el resultado es el total anual de cadetes aunque no esten en la tabla inasistencias, pero cuando filtro que extraiga un trimestre el resultado no es el total de cadetes aunque le agregue
1
or i.cantidad is null
`.

Necesito que me de el resultado del total de cadetes para ese trimestre aunque le de 0 inasistencia, ya que cuando INTERCEPTO, el cadete puede cumplir con todos los demas filtros para el premio pero si no cumple con el ultimo resultado de inasistencia no figura. Lo extranio es que quitando esa linea, obtengo a todos los cadetes pero no me sirve ya que tengo la sumatoria anual de inasistencias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Combinar dos resultados (2 consultas SQL)

Publicado por Adrian (5 intervenciones) el 21/06/2015 06:57:38
He analizado y veo que los cadetes que no aparecen es porque tienen inasistencias pero no en ese trimestre, o sea que al incorporar:
1
or i.cantidad is null
agrego al resultado a los cadetes que estan en 0 en todo el anio, pero no cuenta a quien tiene inasistencias en ese trimestre pero las tiene en otro.
En la tabla inasistencias tengo a los que faltaron en todo el anio discriminado por fecha. El que no falto en todo el anio esta en 0, y lo registro en el resutado. El que falto en ese trimestre lo cuento con el EXTRACT y tambien sale en el resultado, ahora el que falto en otra fecha no logro sumarlo al resultado con inasistencia 0.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar