Está en la página 1de 11

-- a. Liste el nombres y apellidos de los propietarios con más un vehículo.

SELECT b.des_nom_propietario,

b.des_ape_propietario,

COUNT(*) as num_cantidad

FROM tb_auto a

INNER JOIN tb_propietario b ON a.cod_propietario = b.cod_propietario

GROUP BY b.des_nom_propietario, b.des_ape_propietario

HAVING COUNT(*) > 1

-- b. Liste el número, fecha, placa, apellidos y nombres de las papeletas que contengan el tipo
de infracción M02.

SELECT a.cod_papeleta,

a.fec_papeleta,

a.cod_placa,

c.des_ape_propietario,

c.des_nom_propietario

FROM tb_papeleta a

INNER JOIN tb_auto b ON a.cod_placa = b.cod_placa

INNER JOIN tb_propietario c ON b.cod_propietario = c.cod_propietario

WHERE a.cod_infraccion = 'M02'

-- c. Liste las placas de vehículos con las papeletas acumuladas. (de mayor a menor)

SELECT cod_placa, COUNT(*) as num_cantidad

FROM tb_papeleta

GROUP BY cod_placa

ORDER BY num_cantidad desc

-- d. Liste las papeletas que se han impuesto en la primera quincena de marzo del 2012.
SELECT *

FROM tb_papeleta

WHERE fec_papeleta >= '2012-03-01 00:00:00'

AND fec_papeleta <= '2012-03-15 23:59:59'

SELECT *

FROM tb_papeleta

WHERE fec_papeleta BETWEEN '2012-03-01 00:00:00' AND '2012-03-15 23:59:59'

SELECT *

FROM tb_papeleta

WHERE convert(varchar, fec_papeleta, 112) BETWEEN '20120301' AND '20120315'

-- e. Liste los policías que hayan impuesto papeletas con el tipo la infracción M02, ordenarlo
por apellidos en forma ascendente..

SELECT b.des_ape_agente,

b.des_nom_agente

FROM tb_papeleta a

INNER JOIN tb_agente b ON a.cod_agente = b.cod_agente

WHERE a.cod_infraccion = 'M02'

ORDER BY 1 asc

-- f. Liste el código y descripción de las infracciones que no han generado papeletas.

SELECT *

FROM tb_infraccion

WHERE cod_infraccion not in (SELECT cod_infraccion FROM tb_papeleta)


-- g. Liste los policías (nombres y apellidos concatenados) cuyo uno de sus apellidos (paterno o
materno) sea VASQUEZ

SELECT des_nom_agente + ' ' + des_ape_agente as des_agente

FROM tb_agente

WHERE des_nom_agente + ' ' + des_ape_agente LIKE '%VASQUEZ%'

-- h. Liste los vehículos (placa) cuyo número de placa en la posición 3 contenga “Y”.

SELECT cod_placa

FROM tb_auto

WHERE cod_placa LIKE '__Y%'

SELECT cod_placa

FROM tb_auto

WHERE substring(cod_placa, 3, 1) = 'Y'

-- i. Liste la cantidad de vehículos por marca y color. Mostrar el código, la descripción y la


cantidad.

SELECT a.cod_marca, b.des_marca, a.cod_color, c.des_color, COUNT(*)

FROM tb_auto a

INNER JOIN tb_marca b ON a.cod_marca = b.cod_marca

INNER JOIN tb_color c ON a.cod_color = c.cod_color

GROUP BY a.cod_marca, b.des_marca, a.cod_color, c.des_color

-- j. Liste el record de papeletas impuestas por policías.

SELECT b.des_ape_agente,

b.des_nom_agente,

COUNT(*)

FROM tb_papeleta a
INNER JOIN tb_agente b ON a.cod_agente = b.cod_agente

GROUP BY b.des_ape_agente, b.des_nom_agente

/*************************/

/*** VISTAS (6 PUNTOS) ***/

/*************************/

/
*****************************************************************************
/

/*** a. Cree la vista VW_AGENTES, que muestre la relación de datos: ***/

/*** CODAGENTE / NOM_COMPLETOS(Nombres y Apellidos) / NOM_DISTRITO_RESIDE ***/

/*** CANTIDAD_PAPELETAS (Cantidad de papeletas generadas por el agente) ***/

/*** IMPORTE_TOTAL_MULTAS (Monto total de multas ***/

/
*****************************************************************************
/

CREATE VIEW VW_AGENTES

AS

SELECT a.cod_agente,

a.des_nom_agente + ' ' + a.des_ape_agente as des_agente,

b.des_distrito,

count(*) as num_cantidad_papeleta,

SUM(d.num_multa) as num_multa

FROM tb_agente a

INNER JOIN tb_distrito b ON a.cod_distrito = b.cod_distrito

INNER JOIN tb_papeleta c ON a.cod_agente = c.cod_agente

INNER JOIN tb_infraccion d ON c.cod_infraccion = d.cod_infraccion

GROUP BY a.cod_agente, a.des_nom_agente, a.des_ape_agente,


b.des_distrito
/
*****************************************************************************
*************************************************/

/*** b. Cree la vista VW_PAPELETAS, que muestre la relación de datos:


***/

/*** NUMPAPELETA, / MES_PAPELETA (Mes que se emitió la papeleta) / ANIO_PAPELETA


(Año que se emitió la papeleta) ***/

/*** CODINFRACCION / DESCRIPCION_INFRACCION / MULTA_INFRACCION / NUM_PLACA /


MARCA_AUTO (Descripción de la marca de auto) ***/

/*** NOM_COMPLETOS_PROPIETARIO (Nombres y Apellidos)


***/

/
*****************************************************************************
*************************************************/

CREATE VIEW VW_PAPELETAS

AS

SELECT a.cod_papeleta,

MONTH(a.fec_papeleta) as num_mes,

YEAR(a.fec_papeleta) as num_anio,

a.cod_infraccion,

b.des_infraccion,

b.num_multa,

c.cod_placa,

d.des_marca,

e.des_nom_propietario + ' ' + e.des_ape_propietario as


des_propietario

FROM tb_papeleta a

INNER JOIN tb_infraccion b ON a.cod_infraccion = b.cod_infraccion

INNER JOIN tb_auto c ON a.cod_placa = c.cod_placa

INNER JOIN tb_marca d ON c.cod_marca = d.cod_marca

INNER JOIN tb_propietario e ON c.cod_propietario = e.cod_propietario


/**********************************************/

/*** PROCEDIMIENTOS ALMACENADOS (06) PUNTOS ***/

/**********************************************/

/
*****************************************************************************
******/

/*** a. Cree un procedimiento que devuelva las papeletas emitidas en un periodo. ***/

/*** Parámetro 1: Agente (Policía) ***/

/*** Parámetro 2: Fecha de Inicio ***/

/*** Parámetro 3: Fecha de Final ***/

/
*****************************************************************************
******/

ALTER PROCEDURE SP_PAPELETAS

@AS_COD_AGENTE CHAR(05),

@AS_FEC_INICIO CHAR(08),

@AS_FEC_FINAL CHAR(08)

AS

BEGIN

SELECT a.cod_papeleta,

a.fec_papeleta,

a.cod_infraccion,

b.des_infraccion,

a.cod_placa,

c.des_nom_agente,

c.des_ape_agente

FROM tb_papeleta a

INNER JOIN tb_infraccion b ON a.cod_infraccion = b.cod_infraccion

INNER JOIN tb_agente c ON a.cod_agente = c.cod_agente

WHERE a.cod_agente = @AS_COD_AGENTE


AND a.fec_papeleta between @AS_FEC_INICIO AND @AS_FEC_FINAL

END

-- EXECUTE SP_PAPELETAS '00066', '20120101', '20121231'

/
*****************************************************************************
*************************************************/

/*** b. Cree un procedimiento que devuelva la cantidad e importe total de papeletas emitidas
por propietario en un periodo. ***/

/*** Parámetro 1: Fecha de Inicio ***/

/*** Parámetro 1: Fecha de Final ***/

/
*****************************************************************************
*************************************************/

CREATE PROCEDURE SP_PAPELETAS_PROPIETARIO

@AS_FEC_INICIO CHAR(08),

@AS_FEC_FINAL CHAR(08)

AS

BEGIN

SELECT c.des_ape_propietario,

c.des_nom_propietario,

COUNT(*) as num_cantidad_papeletas,

SUM(d.num_multa) as num_multa

FROM tb_papeleta a

INNER JOIN tb_auto b ON a.cod_placa = b.cod_placa

INNER JOIN tb_propietario c ON b.cod_propietario = c.cod_propietario

INNER JOIN tb_infraccion d ON a.cod_infraccion = d.cod_infraccion

WHERE convert(char(08), fec_papeleta, 112) BETWEEN @AS_FEC_INICIO AND


@AS_FEC_FINAL
GROUP BY c.des_ape_propietario,c.des_nom_propietario

END

-- EXECUTE SP_PAPELETAS_PROPIETARIO '20120101', '20121231'

/
*****************************************************************************
********/

/*** c. Cree un procedimiento que devuelva los propietarios con más de 3 papeletas ***/

/
*****************************************************************************
********/

CREATE PROCEDURE SP_PROPIETARIOS_MAS_TRES_PAPELETAS

AS

BEGIN

SELECT a.cod_placa,

c.des_ape_propietario,

c.des_nom_propietario,

COUNT(*) as num_cantidad

FROM tb_papeleta a

INNER JOIN tb_auto b ON a.cod_placa = b.cod_placa

INNER JOIN tb_propietario c ON b.cod_propietario = c.cod_propietario

GROUP BY a.cod_placa, c.des_ape_propietario, c.des_nom_propietario

HAVING COUNT(*) >= 3

END

/
*****************************************************************************
************************/

/*** d. Cree un procedimiento que devuelva la cantidad de papeletas por propietario,


considerando: ***/
/*** Entre 1 y 5 papeletas, devolver NIVEL DEL INFRACTOR BAJO ***/

/*** Entre 6 y 10 papeletas, devolver NIVEL DEL INFRACTOR MEDIO ***/

/*** Mayor a 10, devolver NIVEL DEL INFRACTOR ALTO ***/

/
*****************************************************************************
************************/

CREATE PROCEDURE SP_NIVEL_INFRACCION

AS

BEGIN

SELECT a.cod_placa,

c.des_ape_propietario,

c.des_nom_propietario,

(CASE WHEN COUNT(*) BETWEEN 1 AND 5 THEN 'NIVEL DE INFRACTOR


BAJO'

WHEN COUNT(*) BETWEEN 6 AND 10 THEN 'NIVEL DE INFRACTOR


MEDIO'

WHEN COUNT(*) > 10 THEN 'NIVEL DE INFRACTOR ALTO'

END) as des_observacion

FROM tb_papeleta a

INNER JOIN tb_auto b ON a.cod_placa = b.cod_placa

INNER JOIN tb_propietario c ON b.cod_propietario = c.cod_propietario

GROUP BY a.cod_placa, c.des_ape_propietario, c.des_nom_propietario

END

-- EXEC SP_NIVEL_INFRACCION

/*****************************/

/*** FUNCIONES (03 PUNTOS) ***/

/*****************************/
-- a. Cree una función FN_PAPELETA_GETCANTIDAD que retorna la cantidad de papeletas que
existe para un determinado código de infracción.

CREATE FUNCTION FN_PAPELETA_GETCANTIDAD (@as_cod_infraccion char(03))

RETURNS int

AS

BEGIN

DECLARE @ls_return int

SELECT @ls_return = COUNT(*)

FROM tb_papeleta

WHERE cod_infraccion = @as_cod_infraccion

RETURN @ls_return

END

SELECT dbo.FN_PAPELETA_GETCANTIDAD('M02')

-- b. Cree una función FN_MARCA_CANTIDAD que retorna la cantidad de autos que existe para
esa marca de autos.

CREATE FUNCTION FN_MARCA_CANTIDAD(@as_cod_marca char(02))

RETURNS int

AS

BEGIN

DECLARE @ls_return int

SELECT @ls_return = COUNT(*)

FROM tb_auto

WHERE cod_marca = @as_cod_marca

RETURN @ls_return
END

SELECT dbo.FN_MARCA_CANTIDAD('01')

-- c. Cree una función FN_DESCRIPCION_AUTO que retorna la descripción existe para un


determinado código de auto.

CREATE FUNCTION FN_DESCRIPCION_AUTO (@as_placa char(07))

RETURNS varchar(100)

AS

BEGIN

DECLARE @ls_return varchar(100)

SELECT @ls_return = b.des_ape_propietario + ', ' + b.des_nom_propietario

FROM tb_auto a

INNER JOIN tb_propietario b ON a.cod_propietario = b.cod_propietario

WHERE a.cod_placa = @as_placa

RETURN @ls_return

END

select dbo.FN_DESCRIPCION_AUTO('ADD-570')

nydD9rAJ5D

También podría gustarte