Consulta

Hola Buenos Días!
Mi problema es el siguiente:Estoy trabajando con SQL server 2000 y tengo una vista llamada vista1 que contiene dos campos: código de central y teléfono. Tengo otra vista llamada vista2 que contiene dos campos igual que la anterior: código de central y teléfono. La diferencia entre vista1 y vista2 es que la vista1 muestra todos los teléfonos operativos mientras que la vista2 muestra solo los teléfonos averiados. He creado una consulta para mostrar el código de la central, la cantidad de teléfonos operativos y la cantidad de averiados agrupados por central, de esta manera: Select vista1. Central, count(vista1. Telefono),averiados=case when count(vista2. Teléfono)>0 then count(vista2. Telefono)else 0 end from vista1,vista2 group by vista1. Central. Pero el resultado arrojado no es el esperado, pues debería mostrarme un cero en las centrales donde no tenga averiados y lo que me muestra es la misma cantidad de teléfonos operativos. Como puedo resolver esto, por favor!

1 Respuesta

Respuesta
1
El primer problema que veo en l consulta es la ausencia del join entre las 2 vistas, lo que muy probablemente esta resultando en un producto cartesiano. Posiblemente lo que necesitar es definir un OUTER JOIN entre las 2 vistas, pues podrían existir centrales sin teléfonos averiados. Además quitaría ese case pues no me parece necesario. Creo que la instrucción que necesitas sería algo así como:
Select vista1.central,
count(vista1.telefono),
averiados = ISNULL(count(vista2.telefono), 0)
from vista1 LEFT OUTER JOIN vista2
where vista1.central = vista2.central
group by vista1.central
Disculpame pero ejecuté la consulta indicada por ti y me genera el siguiente error: "sintaxis incorrecta cerca de la palabra clave where"
Prueba Así:
Select vista1.central,
count(vista1.telefono),
averiados = ISNULL(count(vista2.telefono), 0)
from vista1 LEFT OUTER JOIN vista2
on vista1.central = vista2.central
group by vista1.central

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas