Está en la página 1de 2

Laboratorio de Computación II 1er.

Parcial 2018

Realice las siguientes consultas sobre la base de datos MANTENIMIENTO perteneciente a una
flota de vehículos de una empresa de remises.

RESPONSABLES UNIDADES MANTENIMIENTOS MECANICOS


@ cod_responsable @ cod_unidad @ cod_mecanico # @ cod_mecanio
nombre marca @ cod_unidad # nom_mecanico
tel_responsable modelo @ fec_mantenim direccion
direccion fec_compra Detalle tel_mecanico
cod_responsable# tipo_mantenim especialidad
descripción Monto

Nota: Las tablas no están normalizadas correctamente para simplificar el examen

TEMA 1

1. Se quiere saber dentro del año en curso, cuánto fue el total pagado en concepto de
mantenimientos a cada mecánico mensualmente, cuánto fue lo más caro y lo más barato pero
solo aquellos en los que la cantidad de mantenimientos haya superado los 10. Rotule. (15%)
Select me.cod_mecanico Código ,nom_mecanico Nombre,
month(fec_mantenimiento)Mes, sum(monto)‘Total pagado’,
max(monto)‘Más caro’,min(monto)‘Más barato’
From mantenimientos ma,mecanicos me
Where ma.cod_mecanico=me.cod_mecanico
And year(fec_mantenimiento)=year(getdate())
Group by me.cod_mecanico,nom_mecanico,month(fec_mantenimiento)
Having count(*)>0

2. Emitir un listado de mecánicos que realizaron mantenimientos en los dos últimos meses de este
año, a autos fiat, peugeot y chevrolet, cuyos responsables tienen teléfonos o dirección conocidos
y cuyo mantenimiento haya costado entre $1000 y $3000. Ordene por especialidad de mecánico
en forma descendente y luego por nombre.(15%)
Select me.cod_mecanico Código ,nom_mecanico Nombre,Especialidad
From mantenimientos ma,mecanicos me,unidades u,responsables r
Where ma.cod_mecanico=me.cod_mecanico and u.cod_unidad=ma.cod_unidad
And r.cod_responsable=u.cod_responsable
And fec_mantenimiento>=dateadd(month,-2,getdate())
--o bien: datediff(month,fec_mantenimiento,getdate())<=2
And marca in (‘Fiat’, ‘peugeot’, ‘chevrolet’)
And (tel_mecanico is not null or direccion is not null)
And monto between 1000 and 3000
Order by especialidad desc,nombre

3. ¿Cuánto se pagó en concepto de mantenimientos el año pasado y cuál fue el monto promedio
de cada uno? (10%)
Select sum(monto)Total,avg(monto)Promedio
From mantenimientos
Where year(fec_mantenimiento)=year(getdate())-1
4. Se quiere emitir un listado de responsables de unidades y uno de mecánicos pero que el
resultado aparezca en una misma tabla, donde primero se muestren los responsables y luego los
mecánicos ordenados alfabéticamente por nombre. (10%)
Select cod_responsable Código, nombre Nombre, tel_responsable Teléfono,
‘Responsable’ Tipo
From responsables
UNION
Select cod_mecanico, nom_mecanico, tel_mecanico, ‘Mecánico’
From mecanicos
Order by 4 desc, 2

TEMA 2

1. Se quiere saber en los seis últimos meses, cuánto fue el total pagado en concepto de
mantenimientos por cada mecánico mensualmente y cuántos mantenimientos se hicieron, pero
solo aquellos en los que el promedio mensual pagado haya superado los $ 5000. Rotule. (15%)
Select me.cod_mecanico Código ,nom_mecanico Nombre,
year(fec_mantenimiento)Año,month(fec_mantenimiento)Mes,
sum(monto) ‘Total pagado’,count(*)‘Cant.de mantenimientos’
From mantenimientos ma,mecanicos me
Where ma.cod_mecanico=me.cod_mecanico
And fec_mantenimiento>=dateadd(month,-6,getdate())
--o bien: datediff(month,fec_mantenimiento,getdate())<=6
Group by me.cod_mecanico,nom_mecanico,month(fec_mantenimiento)
Having avg(monto)>5000

2. Emitir un listado de mecánicos que realizaron en el año en curso, mantenimientos a autos


modelos 2011, 2012 y 2015, que hayan sido comprados entre el 2010 y el 2016 y no que tengan
detalle de mantenimiento o que el tipo de mantenimiento haya sido “preventivo”. Ordene por
fecha de mantenimiento descendente y alfabéticamente por nombre de responsable. (15%)
Select me.cod_mecanico Código ,nom_mecanico Mecánico,Especialidad,
fec_mantenimiento‘Fecha de mantenimiento’,nombre Responsable
From mantenimientos ma,mecanicos me,unidades u,responsables r
Where ma.cod_mecanico=me.cod_mecanico and u.cod_unidad=ma.cod_unidad
And r.cod_responsable=u.cod_responsable
And year(fec_mantenimiento)=year(getdate())
And modelo in (2011, 2012, 2015)
And (detalle is null or tipo_mantenim like ‘%preventivo%’)
And year(fec_compra) between 2010 and 2016
Order by fec_mantenimiento desc,nombre

También podría gustarte