Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta compljea

Estas en el tema de Consulta compljea en el foro de Mysql en Foros del Web. Un saludo a todos los usuarios de foros del web, tengo un problema no puedo realizar una consulta a mi base de datos mysql 5, ...
  #1 (permalink)  
Antiguo 28/09/2008, 10:09
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años
Puntos: 0
Consulta compljea

Un saludo a todos los usuarios de foros del web, tengo un problema no puedo realizar una consulta a mi base de datos mysql 5, la situacion radica de la siguiente manera : debo elaborar una consulta de alumnos de la siguiente forma:

Nombre alumno, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto
Jose Pérez x x x x x x x x

Lo anterior indicaria que el alumno Jose Perez ha cancelado los meses de Enero a Agosto, pero en mi tabla meses, los campos que tengo solo son idmes y mes, al efectuar la consulta me despliega en forma vertical la informacion es decir me escribe 8 veces hacia abajo el nombre del alumno y a la par los meses que cancelo, y lo que deseo es presentar la informacion en forma horizontal tal como lo escribi anteriormente, ya he intentado de varias formas pero no logro hacerlo, por favor necesito de su ayuda para resolver este problema.

Cabe mencionar que ya utilice as en mi select y nada he estado intentando crear vitas y tampoco
  #2 (permalink)  
Antiguo 29/09/2008, 01:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta compljea

Podrías hacerlo con programación. Pero si quieres hacerlo desde la base de datos, podrías hacer algo parecido a esto. No sé cómo tienes metido el mes, si como varchar o cómo (he pensado que tienes metido enero, febrero, marzo, etc.), pero esta consulta podría hacer lo que quieres.

Código sql:
Ver original
  1. SELECT a.nombre,
  2. IF( SUM( IF( m.meses = 'enero', 1, 0 ) ) >0, 'X', '' ) AS enero,
  3. IF( SUM( IF( m.meses = 'febrero', 1, 0 ) ) >0, 'X', '' ) AS febrero,
  4. IF( SUM( IF( m.meses = 'marzo', 1, 0 ) ) >0, 'X', '' ) AS marzo,
  5. IF( SUM( IF( m.meses = 'abril', 1, 0 ) ) >0, 'X', '' ) AS abril,
  6. IF( SUM( IF( m.meses = 'mayo', 1, 0 ) ) >0, 'X', '' ) AS mayo,
  7. IF( SUM( IF( m.meses = 'junio', 1, 0 ) ) >0, 'X', '' ) AS junio,
  8. IF( SUM( IF( m.meses = 'julio', 1, 0 ) ) >0, 'X', '' ) AS julio,
  9. IF( SUM( IF( m.meses = 'agosto', 1, 0 ) ) >0, 'X', '' ) AS agosto,
  10. IF( SUM( IF( m.meses = 'septiembre', 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  11. IF( SUM( IF( m.meses = 'octubre', 1, 0 ) ) >0, 'X', '' ) AS octubre,
  12. IF( SUM( IF( m.meses = 'noviembre', 1, 0 ) ) >0, 'X', '' ) AS noviembre,
  13. IF( SUM( IF( m.meses = 'diciembre', 1, 0 ) ) >0, 'X', '' ) AS diciembre
  14. FROM `alumno` a
  15. INNER JOIN meses m ON a.id = m.idalumno
  16. GROUP BY a.id

Agrupo por nombre y luego hago suma por meses, el primer if de cada mes convierte cualquier número que no sea cero en una X.
  #3 (permalink)  
Antiguo 30/09/2008, 01:15
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años
Puntos: 0
Respuesta: Consulta compljea

Cita:
Iniciado por jurena Ver Mensaje
Podrías hacerlo con programación. Pero si quieres hacerlo desde la base de datos, podrías hacer algo parecido a esto. No sé cómo tienes metido el mes, si como varchar o cómo (he pensado que tienes metido enero, febrero, marzo, etc.), pero esta consulta podría hacer lo que quieres.

Código sql:
Ver original
  1. SELECT a.nombre,
  2. IF( SUM( IF( m.meses = 'enero', 1, 0 ) ) >0, 'X', '' ) AS enero,
  3. IF( SUM( IF( m.meses = 'febrero', 1, 0 ) ) >0, 'X', '' ) AS febrero,
  4. IF( SUM( IF( m.meses = 'marzo', 1, 0 ) ) >0, 'X', '' ) AS marzo,
  5. IF( SUM( IF( m.meses = 'abril', 1, 0 ) ) >0, 'X', '' ) AS abril,
  6. IF( SUM( IF( m.meses = 'mayo', 1, 0 ) ) >0, 'X', '' ) AS mayo,
  7. IF( SUM( IF( m.meses = 'junio', 1, 0 ) ) >0, 'X', '' ) AS junio,
  8. IF( SUM( IF( m.meses = 'julio', 1, 0 ) ) >0, 'X', '' ) AS julio,
  9. IF( SUM( IF( m.meses = 'agosto', 1, 0 ) ) >0, 'X', '' ) AS agosto,
  10. IF( SUM( IF( m.meses = 'septiembre', 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  11. IF( SUM( IF( m.meses = 'octubre', 1, 0 ) ) >0, 'X', '' ) AS octubre,
  12. IF( SUM( IF( m.meses = 'noviembre', 1, 0 ) ) >0, 'X', '' ) AS noviembre,
  13. IF( SUM( IF( m.meses = 'diciembre', 1, 0 ) ) >0, 'X', '' ) AS diciembre
  14. FROM `alumno` a
  15. INNER JOIN meses m ON a.id = m.idalumno
  16. GROUP BY a.id

Agrupo por nombre y luego hago suma por meses, el primer if de cada mes convierte cualquier número que no sea cero en una X.
Gracias por tu comenario Jurena, de hecho si tengo metido los meses de Enero a Octubre, pero lo que me va a denotar si un mes esta pagado o no es otro campo que olvide mencionar anteriormente y este campo lo llamo estado, bueno te voy a colocar los campos de mi tabla pagos siendo estos:

fecha, idalumno, boleta, IDMES, idrubros, ESTADO, mora, idciclo.

a través del idalumno obtengo los datos de apellido y nombre del alumno, ahora bien para saber si un mes esta pagado cito al idmes por ejemplo 1 es enero y luego verifico si el campo ESTADO tien el valor 1 de ser así esto significa que el mes enero esta cancelado, si el campo estado tuviera un valor 0 entonces indica que el mes no ha sido cancelado.

espero que con esto se aclare mas el panorama, perdón por no haber descrito esto antes. Ya con estos datos me gustaria saber como podria cambiar la consulta que me describiste pero ya tomando en cuenta el campo estado, quiza sea muy sencillo, pero la verdad es que soy novato con mysql.

Por tu ayuda te estoy muy agradecido.
  #4 (permalink)  
Antiguo 30/09/2008, 07:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta compljea

para una tabla alumno y otra llamada meses

Código sql:
Ver original
  1. SELECT a.nombre, IF( SUM( IF( m.idmes = 1 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS enero,
  2. IF( SUM( IF(m.idmes = 2 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
  3. IF( SUM( IF(m.idmes = 3 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
  4. IF( SUM( IF(m.idmes = 4 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
  5. IF( SUM( IF(m.idmes = 5 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
  6. IF( SUM(IF(m.idmes = 6 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
  7. IF( SUM( IF(m.idmes = 7 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
  8. IF( SUM( IF(m.idmes = 8 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
  9. IF( SUM( IF(m.idmes = 9 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  10. IF( SUM( IF(m.idmes = 10 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre
  11. FROM `alumno` a INNER JOIN meses m ON a.id = m.idalumno GROUP BY a.id
Por supuesto, si tienes una tabla con los nombres de los meses podrías hacer un GROUP_CONCAT y podrías ofrecer la lista de los meses pagados.

Pero si quieres cruces, puedes usar esta opción.
  #5 (permalink)  
Antiguo 02/10/2008, 22:32
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años
Puntos: 0
Respuesta: Consulta compljea

Cita:
Iniciado por jurena Ver Mensaje
para una tabla alumno y otra llamada meses

Código sql:
Ver original
  1. SELECT a.nombre, IF( SUM( IF( m.idmes = 1 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS enero,
  2. IF( SUM( IF(m.idmes = 2 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
  3. IF( SUM( IF(m.idmes = 3 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
  4. IF( SUM( IF(m.idmes = 4 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
  5. IF( SUM( IF(m.idmes = 5 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
  6. IF( SUM(IF(m.idmes = 6 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
  7. IF( SUM( IF(m.idmes = 7 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
  8. IF( SUM( IF(m.idmes = 8 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
  9. IF( SUM( IF(m.idmes = 9 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  10. IF( SUM( IF(m.idmes = 10 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre
  11. FROM `alumno` a INNER JOIN meses m ON a.id = m.idalumno GROUP BY a.id
Por supuesto, si tienes una tabla con los nombres de los meses podrías hacer un GROUP_CONCAT y podrías ofrecer la lista de los meses pagados.

Pero si quieres cruces, puedes usar esta opción.
Jurena, he intentado correr el código postedado en el query browser de mysql pero me da errores, lo que estoy tratando de hacer es elaborar un listado de alumnos por grado, seccion y ciclo, con los meses que ha pagado cada alumno las tablas que utilizo son: Pagos, meses, alumnos, grados, secciones.

campos en tabla pagos: idalumno, idmes, idciclo, estado
campos en tabla meses: idmes, mes
campos en tabla grados: idgrado, grado
campos en tabla secciones: idseccion, seccion
campos en tabla alumnos: idalumno, papellido, sapellido, pnombre, snombre, idgrado, idseccion

de un formulario de vb6 voy a elegir el grado, la seccion, y el ciclo escolar, con estos datos ya puedo determinar el listado de alumnos de ese grado y seccion, para determinar quienes han pagado comparo el idalumno de la tabla pagos con el idalumno de la tabla alumnos al coinicidir ya puedo seleccionar nombre y apellidos.

Al tener los nombres verifico en la tabla pagos: si el estado = 1 y el idmes 1, ok el mes enero ha sido pagado pero si el estado es 0 el mes no ha sido pagado. el idmes lo enlazo a la tabla meses para verificar el nombre del mes pagado.

donde tendria que colocar el where idgrado = xx and idseccion = xx and idciclo = xx and pagos.idalumno = alumnos.idalumno para que funcione esta consulta, asumo que en el from deben ir las tablas alumnos, meses, grados, secciones, pagos, la verdad se me hace dificil ya que yo empiezo a trabajar con bases de datos y especificamente con mysql, quiza lo que se tenga que hacer sea sencillo pero por el momento se me esta complicando, por favor con los datos de las tablas citadas anteriomente podrias darme un esquema de como podria quedar el select...

Por tu ayuda muy agradecido....
  #6 (permalink)  
Antiguo 04/10/2008, 08:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta compljea

Para esos campos, prueba esta consulta:
Código sql:
Ver original
  1. SELECT a.pnombre, a.snombre, a.papellido, a.sapellido, s.seccion, g.grado, IF( SUM( IF(p.idmes = 1 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS enero, IF( SUM( IF( p.idmes = 2 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
  2. IF( SUM( IF( p.idmes = 3 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
  3. IF( SUM( IF( p.idmes = 4 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
  4. IF( SUM( IF( p.idmes = 5 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
  5. IF( SUM( IF( p.idmes = 6 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
  6. IF( SUM( IF( p.idmes = 7 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
  7. IF( SUM( IF( p.idmes = 8 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
  8. IF( SUM( IF( p.idmes = 9 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  9. IF( SUM( IF( p.idmes = 10 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre,
  10. IF( SUM( IF( p.idmes = 11 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS noviembre,
  11. IF( SUM( IF( p.idmes = 12 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS diciembre
  12.  
  13. FROM alumnos a
  14. INNER JOIN pagos p ON a.idalumno = p.idalumno INNER JOIN secciones s ON a.idseccion = s.idseccion INNER JOIN grados g ON a.idgrado = g.idgrado
  15. WHERE g.idgrado = 2 AND s.idseccion = 1
  16. GROUP BY a.idalumno

Te he puesto el WHERE con el grado y sección. Se trata de una consulta que busca los alumnos con idgrado 2 y con idseccion 1, pero también podrías utilizar el OR para unir y que busque a los alumnos que cumplan una de esas dos condiciones.

Última edición por jurena; 04/10/2008 a las 08:06
  #7 (permalink)  
Antiguo 08/10/2008, 12:34
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años
Puntos: 0
Respuesta: Consulta compljea

Cita:
Iniciado por jurena Ver Mensaje
Para esos campos, prueba esta consulta:
Código sql:
Ver original
  1. SELECT a.pnombre, a.snombre, a.papellido, a.sapellido, s.seccion, g.grado, IF( SUM( IF(p.idmes = 1 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS enero, IF( SUM( IF( p.idmes = 2 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
  2. IF( SUM( IF( p.idmes = 3 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
  3. IF( SUM( IF( p.idmes = 4 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
  4. IF( SUM( IF( p.idmes = 5 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
  5. IF( SUM( IF( p.idmes = 6 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
  6. IF( SUM( IF( p.idmes = 7 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
  7. IF( SUM( IF( p.idmes = 8 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
  8. IF( SUM( IF( p.idmes = 9 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  9. IF( SUM( IF( p.idmes = 10 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre,
  10. IF( SUM( IF( p.idmes = 11 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS noviembre,
  11. IF( SUM( IF( p.idmes = 12 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS diciembre
  12.  
  13. FROM alumnos a
  14. INNER JOIN pagos p ON a.idalumno = p.idalumno INNER JOIN secciones s ON a.idseccion = s.idseccion INNER JOIN grados g ON a.idgrado = g.idgrado
  15. WHERE g.idgrado = 2 AND s.idseccion = 1
  16. GROUP BY a.idalumno

Te he puesto el WHERE con el grado y sección. Se trata de una consulta que busca los alumnos con idgrado 2 y con idseccion 1, pero también podrías utilizar el OR para unir y que busque a los alumnos que cumplan una de esas dos condiciones.
Gracias por la informacion Jurena, te comento que le agregue lo que es el ciclo a mi consulta pero cuando la ejecuto no da error lo que suecede es que no me devuelve valores para la consulta Mysql solo lista los campos pero debajo de los mismos no despliega informacion...

te voy a dejar como deje mi consulta talvez tenga un error:

SELECT a.pnombre, a.snombre, a.papellido, a.sapellido, s.seccion, g.grado,
IF( SUM( IF(p.idmes = 1 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS enero,
IF( SUM( IF( p.idmes = 2 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
IF( SUM( IF( p.idmes = 3 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo
FROM ciclos, alumnos a INNER JOIN pagos p ON a.idalumno = p.idalumno
INNER JOIN secciones s ON a.idseccion = s.idseccion INNER JOIN grados g ON a.idgrado = g.idgrado
WHERE g.idgrado = 14 AND s.idseccion = 12 and ciclos.idciclo = 2008
GROUP BY a.idalumno;

la consulta si me despliega el informe con los encabezados como yo deseo lo malo es que no despliega informacion de la base de datos ya verifique y en efecto para los alumnos con idseccion 12, e idgrado = 14 e idciclo = 2008 si existe informacion de pagos efectuados...

Por favor podrias verificar si tengo algun error en esta consulta... Gracias por la ayuda que me has estado brindando en este problema que tengo....
  #8 (permalink)  
Antiguo 08/10/2008, 15:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta compljea

esto está mal
FROM ciclos, alumnos

debe ser FROM alumnos a

dinos qué es ciclos exactamente, qué tipo de datos incluye y qué quieres mostrar y te ayudaremos a la consulta. Prueba la consulta sin ciclos y dinos si lo demás va bien.
  #9 (permalink)  
Antiguo 10/10/2008, 13:04
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años
Puntos: 0
Respuesta: Consulta compljea

Cita:
Iniciado por jurena Ver Mensaje
esto está mal
FROM ciclos, alumnos

debe ser FROM alumnos a

dinos qué es ciclos exactamente, qué tipo de datos incluye y qué quieres mostrar y te ayudaremos a la consulta. Prueba la consulta sin ciclos y dinos si lo demás va bien.

Ciclos es una tabla que me denota el año que el alumno esta cursando, por ejemplo 2007, 2008 etc., intente correr el query sin ciclos y me dio el mismo resultado, es decir no me va a recuperar la informacion que tengo en la base de datos en referencia a los alumnos de un grado y seccion, (tambien debo seleccionar el ciclo escolar para la consulta por tal razon lo agregue al select) cuando verifico la informacion en mysql si tengo alumnos que han realizado el pago de sus colegiaturas por tanto deberia mostrarme la informacion la consulta pero nada. Lo extraño como te comente es que el query no da ningun error cuando lo corro sin el campo ciclos, mysql lo ejecuta sin ningun problema colococa los encabezados pero debajo de éstos ninguna información cuando si debería mostrar datos.

Por tu apoyo muy agradecido...
  #10 (permalink)  
Antiguo 10/10/2008, 13:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta compljea

He añadido la tabla ciclos y relacionado los datos. Ahora la consulta sería:
Código sql:
Ver original
  1. SELECT a.pnombre, a.snombre, a.papellido, a.sapellido, s.seccion, g.grado, c.ciclo, IF( SUM( IF(p.idmes = 1 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS enero, IF( SUM( IF( p.idmes = 2 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
  2. IF( SUM( IF( p.idmes = 3 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
  3. IF( SUM( IF( p.idmes = 4 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
  4. IF( SUM( IF( p.idmes = 5 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
  5. IF( SUM( IF( p.idmes = 6 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
  6. IF( SUM( IF( p.idmes = 7 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
  7. IF( SUM( IF( p.idmes = 8 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
  8. IF( SUM( IF( p.idmes = 9 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  9. IF( SUM( IF( p.idmes = 10 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre,
  10. IF( SUM( IF( p.idmes = 11 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS noviembre,
  11. IF( SUM( IF( p.idmes = 12 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS diciembre
  12.  
  13. FROM alumnos a
  14. INNER JOIN pagos p ON a.idalumno = p.idalumno INNER JOIN secciones s ON a.idseccion = s.idseccion INNER JOIN grados g ON a.idgrado = g.idgrado INNER JOIN ciclos c ON c.id = p.idciclo
  15. WHERE g.idgrado = 1 AND s.idseccion = 1 AND c.ciclo = 2007
  16. GROUP BY a.idalumno

A mí me funciona perfectamente, pero comprueba que hay alguien con esos datos, con idgrado1, idsección1 y que tenga datos del año 2007. En la tabla ciclos he puesto un campo id y un campo ciclo.
  #11 (permalink)  
Antiguo 11/10/2008, 15:46
 
Fecha de Ingreso: abril-2008
Mensajes: 51
Antigüedad: 16 años
Puntos: 0
De acuerdo Respuesta: Consulta compljea

Cita:
Iniciado por jurena Ver Mensaje
He añadido la tabla ciclos y relacionado los datos. Ahora la consulta sería:
Código sql:
Ver original
  1. SELECT a.pnombre, a.snombre, a.papellido, a.sapellido, s.seccion, g.grado, c.ciclo, IF( SUM( IF(p.idmes = 1 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS enero, IF( SUM( IF( p.idmes = 2 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
  2. IF( SUM( IF( p.idmes = 3 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
  3. IF( SUM( IF( p.idmes = 4 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
  4. IF( SUM( IF( p.idmes = 5 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
  5. IF( SUM( IF( p.idmes = 6 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
  6. IF( SUM( IF( p.idmes = 7 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
  7. IF( SUM( IF( p.idmes = 8 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
  8. IF( SUM( IF( p.idmes = 9 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
  9. IF( SUM( IF( p.idmes = 10 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre,
  10. IF( SUM( IF( p.idmes = 11 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS noviembre,
  11. IF( SUM( IF( p.idmes = 12 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS diciembre
  12.  
  13. FROM alumnos a
  14. INNER JOIN pagos p ON a.idalumno = p.idalumno INNER JOIN secciones s ON a.idseccion = s.idseccion INNER JOIN grados g ON a.idgrado = g.idgrado INNER JOIN ciclos c ON c.id = p.idciclo
  15. WHERE g.idgrado = 1 AND s.idseccion = 1 AND c.ciclo = 2007
  16. GROUP BY a.idalumno

A mí me funciona perfectamente, pero comprueba que hay alguien con esos datos, con idgrado1, idsección1 y que tenga datos del año 2007. En la tabla ciclos he puesto un campo id y un campo ciclo.

Ya funciona y muy bien, te AGRADEZCO INFINITAMENTE el soporte que me diste para elaborar esta consulta.....

Quiza puediera dejarse este post fijo por algun espacio de tiempo donde los usuarios de la comunidad de foros del web pudieran verlo y aplicarlo en los proyectos que estuviesen desarrollando en Mysql....

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:21.