Sie sind auf Seite 1von 8

SCRIPT DE CONSULTAS

Diagrama de la base de datos:

INFRACTOR
N_LICENCIA

X_PATERNO

X_MATERNO

CATEGORIA
X_NOMBRE
C_CATEGORIA
F_NACIMIENTO
X_CATEGORIA
X_DISTRITO

X_PROVINCIA CLASE
C_CLASE
C_DEPARTAMENTO

TIP_LICENCIA N_DOCUMENTO X_DESCRIPCION


C_TIP_LICENCIA
C_TIP_DOCUMENTO
X_DESCRIPCION
C_TIP_LICENCIA

C_CATEGORIA DEPARTAMENTO
C_DEPARTAMENTO
C_CLASE

MEDIDA X_DESCRIPCION

C_MEDIDA

X_MEDIDA

TIP_DOCUMENTO
C_TIP_DOCUMENTO
PAPELETA
C_PAPELETA X_DESCRIPCION
INFRACCION
C_INFRACIO N F_PAPELETA

CALIFICACION X_INFRACCIO N X_OBSERVACIONES


C_CALIFICACION
N_UIT C_CIP
X_CALIFICACION
TESTIGO
N_PUNTO C_PLACA
N_DOCUMENTO
C_MEDIDA C_INFRACION
X_NOMBRE
C_CALIFICACIO N N_LICENCIA
X_PATERNO
C_SANCIO N N_DOCUMENTO
X_MATERNO

X_MED_PROBATORIO

C_TIP_DOCUMENTO

SANCION
C_SANCION

X_SANCION AUTORIDAD
C_CIP

X_PATERNO

VEHICULO X_MATERNO

C_PLACA
TRJ_IDENTIDAD X_NOMBRE

C_TRJ_IDENTIDAD C_MARCA

X_NOMBRE C_COLOR

X_PATERNO C_TRJ_IDENTIDAD

X_MATERNO

X_DOMICILIO COLOR
C_COLOR
F_NACIMIENTO

X_COLOR

MARCA
C_MARCA

X_MARCA
Consultas 1:

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


-------------------------CREACION DEL PROCEDURE------------------------------
CREATE PROCEDURE usp_mas_1_carro
@cantidad int = 1
as
SELECT T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO,COUNT(V.C_PLACA)
FROM
TRJ_IDENTIDAD AS T
INNER JOIN
VEHICULO AS V
ON T.C_TRJ_IDENTIDAD=V.C_TRJ_IDENTIDAD
GROUP BY T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO
HAVING COUNT(V.C_PLACA)>@cantidad

-----------------------------EJECUCION---------------------------------------
EXEC usp_mas_1_carro

b) Liste el número y fecha de las papeletas que contengan el tipo de infracción M02

-------------------------CREACION DEL PROCEDURE------------------------------


CREATE PROCEDURE usp_papeleta_infraccion
@codinfraccion char(3) = 'M02'
AS
SELECT C_PAPELETA,C_INFRACION, F_PAPELETA
FROM PAPELETA
WHERE C_INFRACION = @codinfraccion

-------------------------------EJECUCION-------------------------------------
exec usp_papeleta_infraccion

--------------------------------PRUEBA---------------------------------------
SELECT C_PAPELETA,C_INFRACION, F_PAPELETA
FROM PAPELETA

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

-------------------------CREACION DEL PROCEDURE------------------------------


CREATE PROCEDURE usp_papeletas_placa
@orden varchar(4)='DESC'
as
declare @sql varchar(max)
select @sql='
SELECT P.C_PLACA, COUNT(P.C_PAPELETA) AS CANTIDAD_PAPELETAS
FROM PAPELETA AS P
INNER JOIN
VEHICULO AS V
ON P.C_PLACA=V.C_PLACA
GROUP BY P.C_PLACA
ORDER BY COUNT(P.C_PAPELETA) '+@orden
EXECUTE (@sql)

--------------------------------EJECUCION------------------------------------
EXEC usp_papeletas_placa
d) Liste las papeletas que se han impuesto en la quincena de marzo de 2010.

-------------------------CREACION DEL PROCEDURE------------------------------


CREATE PROCEDURE usp_quincena_marzo
@MES VARCHAR(20) = 'MARZO',
@PERIODO VARCHAR(20) = 'QUINCENA'
AS
IF @MES='MARZO' and @PERIODO = 'QUINCENA'
SELECT COUNT(C_PAPELETA) AS NUM_PAPELETAS_QUINCENA
FROM PAPELETA
WHERE F_PAPELETA BETWEEN '2017/03/01' AND '2017/03/15'

IF @MES='MARZO' and @PERIODO = 'MES'


SELECT COUNT(C_PAPELETA) AS NUM_PAPELETAS_MES
FROM PAPELETA
WHERE F_PAPELETA BETWEEN '2017/03/01' AND '2017/03/31'

IF @MES='ENERO' and @PERIODO = 'QUINCENA'


SELECT COUNT(C_PAPELETA) AS NUM_PAPELETAS_QUINCENA
FROM PAPELETA
WHERE F_PAPELETA BETWEEN '2017/01/01' AND '2017/01/15'

IF @MES='ENERO' and @PERIODO = 'MES'


SELECT COUNT(C_PAPELETA) AS NUM_PAPELETAS_MES
FROM PAPELETA
WHERE F_PAPELETA BETWEEN '2017/01/01' AND '2017/01/31'

IF @MES='FEBRERO' and @PERIODO = 'QUINCENA'


SELECT COUNT(C_PAPELETA) AS NUM_PAPELETAS_QUINCENA
FROM PAPELETA
WHERE F_PAPELETA BETWEEN '2017/02/01' AND '2017/02/15'

IF @MES='FEBRERO' and @PERIODO = 'MES'


SELECT COUNT(C_PAPELETA) AS NUM_PAPELETAS_MES
FROM PAPELETA
WHERE F_PAPELETA BETWEEN '2017/02/01' AND '2017/02/31'

--------------------------------EJECUCION------------------------------------
/*
POSIBLES CASOS:
EXEC usp_quincena_marzo 'ENERO','QUINCENA'
EXEC usp_quincena_marzo 'ENERO','MES'
EXEC usp_quincena_marzo 'FEBRERO','QUINCENA'
EXEC usp_quincena_marzo 'FEBRERO','MES'
EXEC usp_quincena_marzo 'MARZO','QUINCENA'
EXEC usp_quincena_marzo 'MARZO','MES'
*/
EXEC usp_quincena_marzo
e) Liste los policías que hayan impuesto papeletas con el tipo la infracción M02.
-------------------------CREACION DEL PROCEDURE-------------------------------
CREATE PROCEDURE usp_papeletas_autoridad
@INFRACCION char(3)='M02'
AS
SELECT A.X_NOMBRE,A.X_PATERNO,A.X_MATERNO,COUNT(P.C_PAPELETA) AS
NUMERO_PAPELETAS
FROM PAPELETA AS P
INNER JOIN
AUTORIDAD AS A
ON P.C_CIP=A.C_CIP
WHERE P.C_INFRACION=@INFRACCION
GROUP BY A.X_NOMBRE,A.X_PATERNO,A.X_MATERNO

--------------------------------EJECUCION-------------------------------------
EXEC usp_papeletas_autoridad

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

-------------------------CREACION DEL PROCEDURE-------------------------------


CREATE PROCEDURE usp_infracciones_no_generaron_papeletas
AS
SELECT
I.C_INFRACION,I.X_INFRACCION,I.N_UIT,I.N_PUNTO,I.C_MEDIDA,I.C_CALIFICACION,I.C
_SANCION
FROM
PAPELETA AS P
RIGHT JOIN
INFRACCION AS I
ON P.C_INFRACION=I.C_INFRACION
WHERE P.C_INFRACION IS NULL

--------------------------------EJECUCION-------------------------------------
EXEC usp_infracciones_no_generaron_papeletas

g) Liste los policías (nombres y apellidos concatenados) cuyo apellido contenga “A”.
-------------------------CREACION DEL PROCEDURE-------------------------------
CREATE PROCEDURE usp_autoridad
@LETRA VARCHAR(8) = '%A%'
AS
SELECT X_NOMBRE +' '+ X_PATERNO+' '+ X_MATERNO AS AUTORIDAD
FROM
AUTORIDAD
WHERE X_PATERNO LIKE @LETRA

--------------------------------EJECUCION-------------------------------------
EXEC usp_autoridad
h) Liste los vehículos (placa) cuyo número de placa en la posición 3 contenga “Y”.
-------------------------CREACION DEL PROCEDURE-------------------------------
CREATE PROCEDURE usp_vehiculo_placa
@LETRA VARCHAR(8) = '__y%'
AS
SELECT *
FROM
VEHICULO
WHERE C_PLACA LIKE @LETRA

--------------------------------EJECUCION-------------------------------------
EXEC usp_vehiculo_placa

i) Liste la cantidad de vehículos por marca y color.


-------------------------CREACION DEL PROCEDURE-------------------------------
CREATE PROCEDURE usp_vehiculos_marca_color
@MARCA VARCHAR(20) = '%',
@COLOR VARCHAR(20) = '%'
AS
SELECT M.X_MARCA,C.X_COLOR, COUNT(V.C_PLACA) AS CANTIDAD
FROM
VEHICULO AS V
INNER JOIN
MARCA AS M
ON V.C_MARCA=M.C_MARCA
INNER JOIN
COLOR AS C
ON V.C_COLOR=C.C_COLOR
WHERE M.X_MARCA LIKE @MARCA AND C.X_COLOR LIKE @COLOR
GROUP BY M.X_MARCA, C.X_COLOR

--------------------------------EJECUCION-------------------------------------
EXEC usp_vehiculos_marca_color

j) Liste el récord de papeletas impuestas por policías.

-------------------------CREACION DEL PROCEDURE-------------------------------


CREATE PROCEDURE usp_record_papeletas
@codigo int
AS
SELECT A.X_NOMBRE,A.X_PATERNO,A.X_MATERNO, COUNT(P.C_PAPELETA)
CANTIDAD_PAPELETAS
FROM
PAPELETA AS P
INNER JOIN
AUTORIDAD AS A
ON P.C_CIP = A.C_CIP
WHERE A.C_CIP = @codigo
GROUP BY A.X_NOMBRE,A.X_PATERNO,A.X_MATERNO

--------------------------------EJECUCION-------------------------------------
exec usp_record_papeletas 2
Consultas 2:

a) Cree un procedimiento que devuelva las papeletas emitidas en un período.

 Parámetro 1: Agente (Policía)


 Parámetro 2: Fecha de Inicio
 Parámetro 3: Fecha de Final
-------------------------CREACION DEL PROCEDURE------------------------------
CREATE PROCEDURE usp_papeletas_emitidas
@autoridad int,
@fechainicio datetime,
@fechafin datetime
as
SELECT A.C_CIP,A.X_NOMBRE AS NOMBRE,A.X_PATERNO AS APE_PATERNO,A.X_MATERNO AS
APE_MATERNO,
COUNT(P.C_PAPELETA) as CantidadPapeletas
FROM PAPELETA AS P
INNER JOIN
AUTORIDAD AS A
ON P.C_CIP=A.C_CIP
WHERE (P.F_PAPELETA BETWEEN @fechainicio AND @fechafin) AND
A.C_CIP=@autoridad
GROUP BY A.C_CIP,A.X_NOMBRE,A.X_PATERNO,A.X_MATERNO

--------------------------------EJECUCION------------------------------------
EXEC usp_papeletas_emitidas '2','2017/01/01','2017/03/02'

----------------------------------PRUEBA-------------------------------------
SELECT A.C_CIP,A.X_PATERNO,COUNT(P.C_PAPELETA)
FROM PAPELETA AS P
INNER JOIN
AUTORIDAD AS A
ON P.C_CIP=A.C_CIP
WHERE (P.F_PAPELETA BETWEEN '2017/01/01' AND '2017/03/02') AND A.C_CIP='2'
GROUP BY A.C_CIP,A.X_PATERNO

b) Cree un procedimiento que devuelva la cantidad e importe total de papeletas


emitidas por el propietario en un período.

 Parámetro 1: Fecha de inicio


 Parámetro 1: Fecha de flinal
-------------------------CREACION DEL PROCEDURE------------------------------
CREATE PROCEDURE usp_cantidad_importe
@fechainicio datetime,
@fechafin datetime
as
SELECT T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO,COUNT(P.C_PAPELETA) AS
NUM_PAPELETAS,SUM(I.N_UIT) AS IMPORTE_TOTAL FROM
PAPELETA AS P
INNER JOIN
VEHICULO AS V
ON P.C_PLACA=V.C_PLACA
INNER JOIN
TRJ_IDENTIDAD AS T
ON V.C_TRJ_IDENTIDAD=T.C_TRJ_IDENTIDAD
INNER JOIN
INFRACCION AS I
ON P.C_INFRACION=I.C_INFRACION
WHERE (P.F_PAPELETA BETWEEN @fechainicio AND @fechafin)
GROUP BY T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO
ORDER BY T.X_NOMBRE ASC
--------------------------------EJECUCION------------------------------------
EXEC usp_cantidad_importe '2017/01/01','2017/03/31'

---------------------------------PRUEBAS-------------------------------------
/* NOTA:
EL REGISTRO DE PAPELETAS VA DEL 01 DE ENERO DEL 2017 AL
31 DE MARZO DEL 2017
*/
SELECT T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO,COUNT(P.C_PAPELETA) AS
NUM_PAPELETAS,SUM(I.N_UIT) AS IMPORTE_TOTAL FROM
PAPELETA AS P
INNER JOIN
VEHICULO AS V
ON P.C_PLACA=V.C_PLACA
INNER JOIN
TRJ_IDENTIDAD AS T
ON V.C_TRJ_IDENTIDAD=T.C_TRJ_IDENTIDAD
INNER JOIN
INFRACCION AS I
ON P.C_INFRACION=I.C_INFRACION
WHERE (P.F_PAPELETA BETWEEN '2017/01/01' AND '2017/03/31')
GROUP BY T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO
ORDER BY T.X_NOMBRE ASC

SELECT COUNT(P.C_PAPELETA),SUM(I.N_UIT),T.X_NOMBRE FROM


PAPELETA AS P
INNER JOIN
VEHICULO AS V
ON P.C_PLACA=V.C_PLACA
INNER JOIN
TRJ_IDENTIDAD AS T
ON V.C_TRJ_IDENTIDAD=T.C_TRJ_IDENTIDAD
INNER JOIN
INFRACCION AS I
ON P.C_INFRACION=I.C_INFRACION
GROUP BY T.X_NOMBRE

c) Cree un procedimiento que devuelva las papeletas del propietario, considerando:

 Edad entre 18 a 25 años, devolver las ADOLESCENTE 1


 Edad entre 26 a 35 años, devolver las JOVEN 1
 Edad es más de 35 años, devolver las JOVEN 2

-------------------------CREACION DEL PROCEDURE------------------------------


CREATE PROCEDURE usp_papeletas_categorias
as
SELECT P.C_PAPELETA,T.C_TRJ_IDENTIDAD, I.X_NOMBRE,I.X_PATERNO,I.X_MATERNO,
DATEDIFF(YEAR, I.F_NACIMIENTO, getdate()) AS EDAD,
CASE
WHEN DATEDIFF(YEAR, I.F_NACIMIENTO, getdate()) BETWEEN 18 AND 25 THEN
'ADOLESCENTE'
WHEN DATEDIFF(YEAR, I.F_NACIMIENTO, getdate()) BETWEEN 26 AND 35 THEN 'JOVEN
1'
WHEN DATEDIFF(YEAR, I.F_NACIMIENTO, getdate()) > 35 THEN 'JOVEN 2'
END AS CATEGORIA
FROM PAPELETA AS P
INNER JOIN VEHICULO AS V
ON P.C_PLACA=V.C_PLACA
INNER JOIN TRJ_IDENTIDAD AS T
ON V.C_TRJ_IDENTIDAD=T.C_TRJ_IDENTIDAD
INNER JOIN INFRACTOR AS I
ON P.N_LICENCIA=I.N_LICENCIA

--------------------------------EJECUCION------------------------------------
EXEC usp_papeletas_categorias
d) Cree un procedimiento que devuelva los propietarios con más de 3 papeletas.

----------------------------CREACION DEL PROCEDURE---------------------------


create procedure usp_mas_3_papeletas
as
select T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO, count(p.c_papeleta) as
CantidadPapeletas
from
PAPELETA as p
inner join
vehiculo as v
on p.c_placa= v.c_placa
inner join
trj_identidad as t
on v.c_trj_identidad=t.c_trj_identidad
group by T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO
having count(p.c_papeleta)>3

-----------------------------EJECUCION---------------------------------------
EXEC usp_mas_3_papeletas

-----------------------------PRUEBA------------------------------------------
select T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO, count(p.c_papeleta) as
CantidadPapeletas
from
PAPELETA as p
inner join
vehiculo as v
on p.c_placa= v.c_placa
inner join
trj_identidad as t
on v.c_trj_identidad=t.c_trj_identidad
group by T.X_NOMBRE,T.X_PATERNO,T.X_MATERNO
having count(p.c_papeleta)>3

Das könnte Ihnen auch gefallen