Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   varios count (https://www.clubdelphi.com/foros/showthread.php?t=18570)

pepe2000 16-02-2005 17:14:26

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

marcoszorrilla 16-02-2005 17:24:50

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.

pepe2000 16-02-2005 17:32:38

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.

marcoszorrilla 16-02-2005 17:38:01

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:
Código Delphi [-]
nEmpleados:=nEmpleados +1;
pero los menores de edad v.g.
Código Delphi [-]
 If EmpleadoFnacimiento.Value < dMiFecha then
 nMenores := nMenores +1;
y tantos if como situaciones.

Un Saludo.

pepe2000 16-02-2005 17:43:16

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?

aom 16-02-2005 17:52:29

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

pepe2000 16-02-2005 18:13:23

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...

aom 16-02-2005 18:16:51

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


La franja horaria es GMT +2. Ahora son las 01:50:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi