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

grupo de filas y columnas

Estas en el tema de grupo de filas y columnas en el foro de Mysql en Foros del Web. Hola amigos. Tengo una duda con una consulta SQL y no se como hacerlo Primeramente tengo una tabla “personas” con los atributos pers_id, pers_nombre, pers_apellidos, ...
  #1 (permalink)  
Antiguo 25/05/2011, 15:09
 
Fecha de Ingreso: enero-2011
Ubicación: la paz
Mensajes: 53
Antigüedad: 13 años, 2 meses
Puntos: 3
grupo de filas y columnas

Hola amigos.

Tengo una duda con una consulta SQL y no se como hacerlo
Primeramente tengo una tabla “personas” con los atributos pers_id, pers_nombre, pers_apellidos, pers_fnacimiento, etc
Lo que quiero realizar es una consulta SQL, que me muestre la cantidad de personas “Hombre” y “Mujer” que han nacido en un determinado mes y año, que se puedan agrupar por columnas de “AÑO” y “SEXO” y también agrupar por Filas “MES”

El resultado más o menos seria una tabla de esta forma.

___|__2000__ |__2001__ |__2002__ |__2003__ |
___|__H_|__M_|__H_|__M_|__H_|__M_|__H_|__M_|
Ene| 36 | 25 | 24 | 16 | 46 | 32 | 33 | 38 |
Feb| 36 | 25 | 36 | 25 | 36 | 25 | 36 | 25 |

Hasta ahora lo hice para un año y no sé cómo hacerlo para un rango de años 2000-2005

Esta es mi consulta SQL

SELECT to_char(p.pers_fnacimiento,'Month'),
sum(CASE WHEN p.pers_sexo = 'H' THEN 1 ELSE 0 END) H,
sum(CASE WHEN p.pers_sexo = 'M' THEN 1 ELSE 0 END) M,
count(*) total
FROM personas p
WHERE to_char(p.pers_fnacimiento,'YYYY')='2002'
GROUP BY to_char(p.pers_fnacimiento,'Month')


no quiero que me lo resuelvan sino me den sugerencias de como hacerlo.

mil disculpas por colocarlo varias veces, pero quiero saber si existe alguna solución o no.

gracias por su tiempo.
  #2 (permalink)  
Antiguo 25/05/2011, 15:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: grupo de filas y columnas

Bueno, algunos detalles:
- Las funciones TO_CHAR() y TO_DATE() no pertenecen al estandar SQL ni tampoco a MySQL. Puede que estés preguntando en el foro equivocado. ¿Qué DBMS usas?
- MySQL no posee la cláusula PIVOT, por lo que no puede invertir una tabla de la forma en que lo pides.
- La tabla tal y como la quieres sólo se puede hacer, al menos con una consulta a MySQL, únicamente por programación, cosa que debes resolver en otro foro.
- Lo que si puede hacer en MySQL es obtener una tabla resultado que pueads usar para contruir el reporte como lo quieres por programación:
Código MySQL:
Ver original
  1.     MONTH(p.pers_fnacimiento) Mes,
  2.     SUM(IF(p.pers_sexo = 'H', 1, 0)) Hombres,
  3.     SUM(IF(p.pers_sexo = 'M', 1, 0)) Mujeres,
  4.     COUNT(*) Total
  5. FROM  personas p
  6. WHERE  YEAR(p.pers_fnacimiento)= 2002
  7. GROUP BY  MONTH(p.pers_fnacimiento);
Esta tabla resultado la deberás procesar en el lenguaje que uses (tema fuera del alcance de este foro).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: columnas, filas, grupo
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 15:26.