Ver Mensaje Individual
  #21  
Antiguo 08-04-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
Hola de nuevo,
estoy haciendo unas pruebas, y la verdad, no me están convenciendo. A no ser que esté haciendo algo mal, y que agradecería que me lo indicarais si alguien lo sabe.

Mi intención es sacar una consulta con las poblaciones y los estados civiles de los clientes. La tabla es de clientes, en donde hay id, nombre, población y estado civil. La tabla tiene 16.500 registros. Existen 4 estados civiles ,a saber: CASADO, SOLTERO, SIN DEF. y VIUDO ( tened en cuenta que no está en producción, son pruebas ).

Una primera consulta sería
Código SQL [-]
select poblacion,
sum ( case when estadocivil='CASADO' then 1 ELSE 0 END) AS CASADO,
sum ( case when estadocivil='SOLTERO' then 1 ELSE 0 END) AS SOLTERO,
sum ( case when estadocivil='SIN DEF.' then 1 ELSE 0 END) AS SINDEF,
sum ( case when estadocivil='VIUDO' then 1 ELSE 0 END) AS VIUDO
from cliente
group by poblacion

Respuesta perfecta, tiempo de consulta aprox 3 segundos.

Utilizando WITH

Código SQL [-]
 with
  estadosciviles as (
    select estadocivil as EC, count(idcliente) as NUMERO
    from cliente
    group by estadocivil)
    select poblacion,
    ECC.numero as CASADOS,
    ECS.numero as SOLTEROS,
    ECSD.numero as SINDEF,
    ECV.numero as VIUDOS
    from cliente  C
    left join estadosciviles ECC on C.estadocivil=ECC.EC
    and ECC.EC='CASADO'
    left join estadosciviles ECS on C.estadocivil=ECS.EC
    and ECS.EC='SOLTERO'
    left join estadosciviles ECSD on C.estadocivil=ECSD.EC
    and ECSD.EC='SIN DEF.'
    left join estadosciviles ECV on C.estadocivil=ECV.EC
    and ECV.EC='VIUDO'

Resultado inexacto. Me devuelve más de una fila por población, y datos un poco extraños.
Tiempo de respuesta. Me deja el equipo cuajado un par de minutos al menos.

Me da la sensación de que estoy haciendo mal la consulta. A ver si alguien me puede poner luz...

Gracias
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita