Bueno, ahora es mi turno de pedir ayuda, a ver si alguien me puede ayudar.
Mi problema consiste en lo siguiente, necesito sacar un total de clientes activos e inactivos por colonia, en una sola tabla, de tal forma que quede de la siguiente manera:
 
Colonia Activos Inactivos
A          2         9
B          0         2
C          0         1
D          1         1
 
 
Actualmente saco la informacion de 2 tablas (clientes y contrato), y tengo que crear 3 tablas de la siguiente manera:
 
-- Creacion de la tabla activos
DROP TABLE colonia_activos
SELECT c1.colonia, COUNT(DISTINCT c1.id) AS activos
INTO colonia_activos
FROM clientes AS c1 
INNER JOIN contrato AS c2
ON c1.id = c2.cliente
WHERE c2.cerrado = 0
GROUP BY c1.colonia
 
-- Creacion de la tabla inactivos
DROP TABLE colonia_inactivos
SELECT c1.colonia, COUNT(DISTINCT c1.id) AS inactivos
INTO colonia_inactivos
FROM clientes AS c1 
INNER JOIN contrato AS c2
ON c1.id = c2.cliente
WHERE c2.cliente NOT IN 
(SELECT cliente FROM contrato WHERE cerrado = 0)
GROUP BY c1.colonia
 
-- Creacion de la tabla totales
DROP TABLE colonia_totales
SELECT DISTINCT c1.colonia, c2.activos, c3.inactivos 
INTO colonia_totales
FROM clientes AS c1
LEFT JOIN colonia_activos AS c2
ON c1.colonia = c2.colonia
LEFT JOIN colonia_inactivos AS c3
ON c1.colonia = c3.colonia
ORDER BY c1.colonia
 
UPDATE colonia_totales
SET activos = 0
WHERE activos IS NULL
UPDATE colonia_totales
SET inactivos = 0
WHERE inactivos IS NULL
SELECT * FROM colonia_totales
 
 
Quisiera saber si es posible sacar esta informacion creando esa ultima tabla de totales, de una manera mas simple, sin tener que crear 2 tablas intermedias.
Intente lo siguiente:
 
SELECT c1.colonia, 
COUNT(DISTINCT c2.cliente) AS activos, 
COUNT(DISTINCT c3.cliente) AS inactivos
FROM clientes AS c1 
INNER JOIN contrato AS c2
ON c1.id = c2.cliente
INNER JOIN contrato AS c3
ON c1.id = c3.cliente
WHERE c2.cerrado = 0
OR
c3.cliente NOT IN 
(SELECT cliente FROM contrato WHERE cerrado = 0)
GROUP BY c1.colonia
ORDER BY c1.colonia
 
 
Pero ademas de que la consulta demora 15 segundos, a diferencia de las anteriores, que hace todo en 2 segundos, no me arroja el resultado correcto, sino que me arroja la suma de activos e inactivos, de la siguiente manera:
 
Colonia Activos Inactivos
A          11       11
B          2         2
C          1         1
D          2         2
 
 
Pero eso mismo ya lo obtengo de manera mas eficiente (un segundo) de la siguiente manera:
 
SELECT c1.colonia, COUNT(DISTINCT c1.id) AS total
FROM clientes AS c1 
INNER JOIN contrato AS c2
ON c1.id = c2.cliente
GROUP BY c1.colonia
ORDER BY c1.colonia
 
 
Repito mi pregunta, alguna idea para sacar el resultado de totales que deseo, sin tener que crear 3 tablas intermedias?
Uso SQL Server 2000
Saludos 
