FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
varios count
Necesito que una consulta SQL presente varias columnas COUNT pero que cada una de ellas "cuente" segun diferentes condiciones?
De una lista de empresas. necesito contar (y que se visualice en varias columnas) los menores de edad, los mayores de edad y los ancianos, suponiendo las siguientes tablas: EMPRESA idEmpresa NomEmpresa EMPLEADO idEmpleado idEmpresa NomEmpleado Edad debo obtener una consulta con resultados así: EMPRESA <EDAD ADULTOS ANCIANOS ------------------------------------------------------- XYZ 15 30 2 BMJ 8 3 0 ... ------------------------------------------------------- Supongo una consulta como esta pero no estoy seguro. Select EMPRESA.nombre, count(EMPLEADOS.edad) as MenorEdad, count(EMPLEADOS.edad) as Mayor de edad .... si alguien pudiera ayudarme estaría muy agradecido |
#2
|
||||
|
||||
Creo que una consulta no vas a poder hacerlo, en todo caso yo montaría una consulta uniendo las tablas que sean necesarías y luego recorrería el conjunto con un ciclo guardando lo que interese en variables y mostrándoles al final del conteo.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
|||
|
|||
entiendo
si pues, ya me rompí la cabeza buscando en cuanto sitio exista y nada de eso. creo que tendre que ingeniarmelas tal como tu me dices aunque ahi aun tengo un problema:
¿Cómo hago para contar los empleados de cada empresa. PERO que ademas en ese conteo se agregue en 1 cada vez que ese empleado es menor de edad? count(empleados)+1 -> siempre que sea menor de edad Lo necesito pq necesitamos saber cuantos regalos vamos a repartir, sabiendo que los menores de edad reciben el doble. Muchas gracias. |
#4
|
||||
|
||||
Lo que te digo es que una vez seleccionadas las tablas mediante SQL, recorras todas las filas aplicando los If correspondientes y en tantas variables como resultados distintos desees vás acumlando cada uno de ellos.
Por ejemplo si cada fila es un empleado: pero los menores de edad v.g. y tantos if como situaciones. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
|||
|
|||
Cuando trabajaba con clipper no tenia ningun problema al hacer esto en mis reportes. pero ahora y con los SQL necesito tener una vista_Empresa que tenga preparada esta información para ser llamada cualquier momento desde otra consulta
Select reparto.fecha, vista_empresa.nombre, vista_empresa.nroRegalos, * from vista_empresa, reparto Where ... Alguna idea? |
#6
|
||||
|
||||
Hola,
prueba esta consulta. Utilizo Firebird 1.5 y ha funcionado bien. select e.idempresa, (select count(*) from empleado ep where ep.idempresa=e.idempresa and edad<18), (select count(*) from empleado ep where ep.idempresa=e.idempresa and edad>=18 and edad<65), (select count(*) from empleado ep where ep.idempresa=e.idempresa and edad>65) from empresa e Saludos
__________________
Más se perdió en la guerra... y volvieron cantando |
#7
|
|||
|
|||
GRACIAS POR TU RESPUESTA
esto si funciona pero demora demasiado para hacer la consulta. debe haber otra manera mas rapida de hacerlo. Supongo que los genios del SQL han tenido que pensar en la posibilidad de aplicar varias funciones de calculo a una misma consulta y con diferentes condiciones. Pero bueno. seguiré investigando... |
#8
|
||||
|
||||
Hola,
que base de datos utilizas? Podrías crear una Stored Procedure que haga un select de la tabla y la vaya recorriendo y sumando 1 a cada grupo de edades en función de la edad. Quizá sea más rápido que los 3 select que se hacen en la consulta. Saludos
__________________
Más se perdió en la guerra... y volvieron cantando |
|
|
|