Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2005
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Angry 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
Responder Con Cita
  #2  
Antiguo 16-02-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 16-02-2005
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Unhappy 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.
Responder Con Cita
  #4  
Antiguo 16-02-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 16-02-2005
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
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?
Responder Con Cita
  #6  
Antiguo 16-02-2005
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 21
aom Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 16-02-2005
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
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...
Responder Con Cita
  #8  
Antiguo 16-02-2005
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 21
aom Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:48:47.


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