Oracle - Ayuda con querys

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 2 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con querys

Publicado por Tro (2 intervenciones) el 20/11/2018 00:11:58
Buenas, soy estudiante de programacion, pero me enviaron un trabajo que con mi experiencia(que es poca)
, no se resolverla...
El encabezado de la primera pregunta es este...

Una de las consideraciones para calcular el fondo de reserva que cada departamento debe pagar es la cantidad de dormitorios que

posee. Por esta razón, se requiere contar con un cuadro resumen que por cada edificio que la empresa administra visualice el total de
departamentos que posee y el total de departamentos que posee de acuerdo a la cantidad de dormitorios. Cabe señalar, que la
empresa, por una política interna, administra edificios que poseen departamentos de hasta 5 dormitorios.
El usuario requiere que la información se muestre en el formato que se indica en el ejemplo y ordenada alfabéticamente por el nombre
del edificio:
Opera-Snapshot_2018-11-19_201041_drive.google.com

Y lo que llevo es esto...
select edi.EDI_NOMBRE_EDIFICIO as "NOMBRE EDIFICIO",
COUNT(dep.NRO_DEPARTAMENTO) AS "TOTAL DEPTOS",
(
SELECT COUNT(TOTAL_DORMITORIOS)
FROM DEPARTAMENTO
WHERE TOTAL_DORMITORIOS=1
) AS "TOTAL DEPTOS 1 DORMITORIO",
(
SELECT COUNT(TOTAL_DORMITORIOS)
FROM DEPARTAMENTO
WHERE TOTAL_DORMITORIOS=2
) AS "TOTAL DEPTOS 2 DORMITORIO",
(
SELECT COUNT(TOTAL_DORMITORIOS)
FROM DEPARTAMENTO
WHERE TOTAL_DORMITORIOS=3
) AS "TOTAL DEPTOS 3 DORMITORIO",
(
SELECT COUNT(TOTAL_DORMITORIOS)
FROM DEPARTAMENTO
WHERE TOTAL_DORMITORIOS=4
) AS "TOTAL DEPTOS 4 DORMITORIO",
(
SELECT COUNT(TOTAL_DORMITORIOS)
FROM DEPARTAMENTO
WHERE TOTAL_DORMITORIOS=5
) AS "TOTAL DEPTOS 5 DORMITORIO"
from edificio edi
inner join DEPARTAMENTO dep on EDI.id_edificio = dep.ID_EDIFICIO
WHERE EDI.id_edificio = dep.ID_EDIFICIO
group by edi.EDI_NOMBRE_EDIFICIO
ORDER BY 1 ASC;

Sin-titulo

Adjunto el modelo, por si alguien le ayuda c:
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
3
Responder
sin imagen de perfil
Val: 3
Ha aumentado su posición en 2 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con querys

Publicado por franco (1 intervención) el 20/11/2018 00:17:50
Oh, es más difícil de lo que parece
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 2 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con querys

Publicado por Tro (2 intervenciones) el 20/11/2018 00:18:31
Es todo un desafio para mentes de genios jovenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antonio
Val: 42
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con querys

Publicado por Antonio (13 intervenciones) el 26/11/2018 18:23:37
Hola, mira creo que esto es lo que pides, al menos es lo que es la salida que está en el ejemplo que enviaste.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- VARIANTE 1, HACIENDO JOIN
SELECT
    EDI_NOMBRE_EDIFICIO as "NOMBRE EDIFICIO",
	COUNT(*) AS "TOTAL DEPTOS",
	COUNT(CASE WHEN D.TOTAL_DORMITORIOS=1 THEN 1 ELSE NULL END) "TOTAL DEPTOS 1 DORMITORIO",
	COUNT(CASE WHEN D.TOTAL_DORMITORIOS=2 THEN 1 ELSE NULL END) "TOTAL DEPTOS 2 DORMITORIO",
	COUNT(CASE WHEN D.TOTAL_DORMITORIOS=3 THEN 1 ELSE NULL END) "TOTAL DEPTOS 3 DORMITORIO",
	COUNT(CASE WHEN D.TOTAL_DORMITORIOS=4 THEN 1 ELSE NULL END) "TOTAL DEPTOS 4 DORMITORIO",
	COUNT(CASE WHEN D.TOTAL_DORMITORIOS=5 THEN 1 ELSE NULL END) "TOTAL DEPTOS 5 DORMITORIO"
  FROM EDIFICIO E, DEPARTAMENTO D
  WHERE E.ID_EDIFICIO=D.ID_EDIFICIO
  GROPUP BY E.NOMBRE_EDIFICIO ;
 
-- VARIANTE 2, UTILIZANDO TABLAS ANIDADAS:
-- ME PARECE QUE ESTA VARIANTE ES MENOS EFICIENTE PORQUE SE HACEN 5 LLAMADAS A LA MISMA TABLA EN UNA SOLA CONSULTA.
SELECT
    EDI_NOMBRE_EDIFICIO as "NOMBRE EDIFICIO",
	(SELECT COUNT(*) FROM DEPARTAMENTO WHERE ID_EDIFICIO=E.ID_EDIFICIO) AS "TOTAL DEPTOS",
	(SELECT COUNT(*) FROM DEPARTAMENTO WHERE ID_EDIFICIO=E.ID_EDIFICIO AND TOTAL_DORMITORIOS=1) "TOTAL DEPTOS 1 DORMITORIO",
	(SELECT COUNT(*) FROM DEPARTAMENTO WHERE ID_EDIFICIO=E.ID_EDIFICIO AND TOTAL_DORMITORIOS=2) "TOTAL DEPTOS 2 DORMITORIO",
	(SELECT COUNT(*) FROM DEPARTAMENTO WHERE ID_EDIFICIO=E.ID_EDIFICIO AND TOTAL_DORMITORIOS=3) "TOTAL DEPTOS 3 DORMITORIO",
	(SELECT COUNT(*) FROM DEPARTAMENTO WHERE ID_EDIFICIO=E.ID_EDIFICIO AND TOTAL_DORMITORIOS=4) "TOTAL DEPTOS 4 DORMITORIO",
	(SELECT COUNT(*) FROM DEPARTAMENTO WHERE ID_EDIFICIO=E.ID_EDIFICIO AND TOTAL_DORMITORIOS=5) "TOTAL DEPTOS 5 DORMITORIO"
  FROM EDIFICIO E ;
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