consulta sql super dificil

zea
16 de Julio del 2004
tengo una b.d. donde llevo el control de alumnos y el servicio social que prestan (tabla alumnos y servicio consecutivamente), en la tabla alumnos tengo matricula, nombre, sexo, carrera,....en la tabla servicio tengo los campos: matricula, actividad, empresa (donde prestara su servicio), yo debo sacar un listado de el numero de alumnos masculinos y femeninos agrupado por empresa, carrera, y el sexo, pero el problema que el campo sexo no puedo dividirlo en 2 campos uno que me muestre el numero total de mujeres que estan dando servicio social en x empresa y que son de la carrera tal, y el otro que muestre el numero total de hombres que estan dando servicio social en x empresa y que son de la carrera tal.
MI problema es que no me sale la consulta y que me muestre:
empresa carrera total femenino totalmasculino

Nota.- el campo sexo permite FEMENINO o MASCULINO
la tabla alumnos esta relacionada con servicio de 1 a 1


Agradezco de antemano quien pueda ilustrarme gracias

Rodolfo Reyes
16 de Julio del 2004
Prueba con el siguiente query:

select c.empresa,c.carrera,c.hombres,d.mujeres
FROM
(select a.empresa,b.carrera,count(sexo) hombres
from alumnos as b, servicio as a
where a.matricula = b.matricula
and b.sexo = 'MASCULINO'
group by a.empresa,b.carrera
) AS C,
(select a.empresa,b.carrera,count(sexo) mujeres
from alumnos as b, servicio as a
where a.matricula = b.matricula
and b.sexo = 'FEMENINO'
group by a.empresa,b.carrera
) AS D
WHERE C.EMPRESA = D.EMPRESA
AND C.CARRERA = D.CARRERA
ORDER BY C.EMPRESA,D.CARRERA

Dependiendo de el manejador de base de datos que estes utilizando puede ser que tengas que cambiar la forma en como se muestran los alias(as A, as B...). No todos los manejadores soportan, tener querys en el from, pero en este caso ayuda ha hacer el query mas sencillo.


fernandoc
16 de Julio del 2004
Con la función iif(condición,si si,si no) puedes definir campos de una consulta condicionados a que se cumpla o no una condición. Por ejemplo, si tenemos un campo SEXO y queremos separa por sexo:

iif(sexo='FEM',1,0) as Mujer, iif(sexo <> 'FEM',1,0) as Hombre

si lo que quieres es contar el num. de mujeres y de hombres puedes utilizar

sum(iif(sexo='FEM',1,0)) as Mujer,sum( iif(sexo <> 'FEM',1,0) ) as Mas