Mostrar todos los encabezados que dependen de un agrupamiento en una consulta

Salud y éxitos...

Utilizo la siguiente expresión para agrupar las edades por grupos etáreos en una consulta con varios campos , entre ellos como es lógico [Edad] :

Grupo: SiInm([Edad]<=1,"< 1",SiInm([Edad]>=1 Y [Edad]<=4,"1 - 4",SiInm([Edad]>=5 Y [Edad]<=9,"5 - 9",SiInm([Edad]>=10 Y [Edad]<=14,"10-14",SiInm([Edad]>=15 Y [Edad]<=19,"15 - 19",SiInm([Edad]>=20 Y [Edad]<=24,"20 - 24",SiInm([Edad]>=25 Y [Edad]<=59,"25-59",SiInm([Edad]>=60,"60 y más","ignorado"))))))))

Todo bien excepto a la hora de presentar los resultados en una consulta de referencias cruzadas. Si algún grupo no tiene valor porque ninguna edad es agrupada en él, no se me presenta en el encabezado y claro que me gustaria que se presentera aunque su valor fuera cero...

Para mejor explicación:Actualmente me queda así (tabla con encabezados variables)

Total de Vecinos <1 1-4 5-9 10-14 20-24 25-59 60 y mas

Vecinos 122 5 2 6 4 15 63 27

Y me deberia quedar así (tabla con encabezados fijos)

Total de Vecinos <1 1-4 5-9 10-14 15-19 20-24 25-59 60 y más ignorado

Vecinos              122                  5      2       6          4           0          15         63           27               0

Cualquier idea, referencia, solución etc la agrecería mucho

2 respuestas

Respuesta
2

Imagino que tu consulta de ref. Cruzadas tendrá una SQL parecida a esta (con tus campos y tabla, obviamente):

TRANSFORM Sum(Gastos. Cuantia) AS SumaDeCuantia
SELECT Gastos.TipoGasto, Sum(Gastos.Cuantia) AS Total
FROM Gastos
WHERE (((Year([fecha]))=Year(Now())))
GROUP BY Gastos.TipoGasto, Year([fecha]);

La consulta que pongo, muestra una serie de gastos agrupados por meses. 

Si quiero que me salgan los 12 meses en lso encabezados, aunque no haya datos para ese mes, hay que añadirle una linea más como ésta:

PIVOT Format([Fecha],"mmm") In ("ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic")

para que quede así:

TRANSFORM Sum(Gastos.Cuantia) AS SumaDeCuantia
SELECT Gastos.TipoGasto, Sum(Gastos.Cuantia) AS Total
FROM Gastos
WHERE (((Year([fecha]))=Year(Now())))
GROUP BY Gastos.TipoGasto, Year([fecha])
PIVOT Format([Fecha],"mmm") In ("ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic");

En tu caso tendrías que añadirle algo como esto:

PIVOT Grupo In ("<1","1-4","5-9","10-14","15-19","20-24","25-59","60 y más","ignorado")

Un saludo.


¡Gracias! Excelente; resolví muy bien esta parte del asunto (y de paso aprendí para otros).ya está bien (o al menos para mi) pero pienso en algunos "requisitos formales"que ponen ciertos jefecillos y estoy seguro que me pedirán cero en las celdas para ellos saber que hay ¡¡¡no hay ningún valor !!! (ja!; la eterna confusión de percibir el cero como valor nulo y viceversa); pues me gustaria acercarme a rellenar estos espacios NULL con ceros.

Imagino (no he intentado implementar, ni la noche acá me ha dado tiempo, que tenga que revisar el valor que adquiere la variable "grupo"en cada "agrupamiento de edades"-disculpen la redundancia- que hago en la consulta de selección que sirve de base para la consulta de referencias cruzadas : Si el valor que toma Grupo en el registro es igual a Nulo entonces Grupo es igual a cero en ese registro , si no es el valor que tiene.

- ¿ Es correcto este razonamiento?

- Si es correcto, ¿cómo lo implementaria?

De antemano gracias y perdonen tanta molestia.

PD : Ahh , en ningún momento del post dije que estaba utilizando Access 2007!!.

Si causa algún tipo de problemas lidiar con esto pues le aplicamos la solución "salomónica" , ¡¡¡¡¡qué los Jefes reciban sus espacios en blanco!!!!!  ;-)

Directamente en la consulta de refs. Cruzadas no puedes, y en una consulta previa, tampoco.

Lo único que puedes hacer es una consulta sobre la consulta de refs cruzadas y usar la función Nz() para convertir los nulos a 0.

Respuesta
1

Deberías usar la cláusula PIVOT

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas