SQL Server - Doble consulta

   
Vista:

Doble consulta

Publicado por Sandra (2 intervenciones) el 13/05/2009 14:48:16
Hola, como estan.....

Tengo que hacer esta consulta y no se como terminarlo:

tengo dos tablas:

personas: id_persona, nombre
movimientos: id_persona, tipomovimiento

nesesito obtener la cantidad de personas con y sin movimientos.

Osea contar las personas que estan en la tabla personas son sin movimiento pero no tiene q aparecer en la tablamovimiento. y contar las que aparecen en movimientos.

el resultado me tiene q dar asi maso menos, supongamos

percon_movi = 20
persin_movi = 10

la consulta que estube haciendo me quedo asi: pero no lo pude terminar. no se como ago para q tambien me cuente las con movi y no se repitan...porq en movimientos puede aprecer mas de una ves la persona.

select count(id_persona) as persin_movi
from personas
where (id_persona) not in
(select id_persona
from movimientos
join personas on movimientos
.id_persona = personas.id_persona)

Bueno si alguien me puede dar una mano lo agradesco muchisimo.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de roger

RE:Doble consulta

Publicado por roger (173 intervenciones) el 13/05/2009 18:29:26
podrias poner en la primera fila los que tienen movimientos y en segunda los que no

select count(*) from personas p where
exists(select m.id_persona from movimientos m where m.id_persona=p.id_persona)
union all
select count(*) from personas p where
not exists(select m.id_persona from movimientos m where m.id_persona=p.id_persona)

o con dos subconsultas

select (select count(*) from personas p where
exists(select m.id_persona from movimientos m where m.id_persona=p.id_persona)) as ConMovimiento,
(select count(*) from personas p where
not exists(select m.id_persona from movimientos m where m.id_persona=p.id_persona)) as SinMovimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Doble consulta

Publicado por Hugo (2 intervenciones) el 13/05/2009 22:58:30
Espero que te sirva. En la consulta de personas sin movimientos el distinct podría estar de más, pero lo pongo por si el campo no está definido como único.

--PERSONAS SIN MOVIMIENTOS
select count(distinct(id_persona)) as persin_movi
from personas
where id_persona not in (select id_persona from movimientos)

--PERSONAS CON MOVIMIENTOS
select count(distinct(id_persona)) as percon_movi
from movimientos

Saludos,
Hugo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar