DESCRIPCION:
5) Idem 4) pero referido a secciones del teatro.
6) Por tipo de evento, de manera historica, los 10 asientos menos preferidos.
Entrada: Ninguna
Salidas: Para cada tipo de evento, se listan los 10 asientos que nunca fueron reservados, o que tienen la menor cantidad de compras.
PROBLEMAS:
CODIGO:
----------------------------------------------------------------------------------------------------------------------
-- Verifica si el store procedure existe, para eliminarlo
IF OBJECT_ID ( N'BT_SP_ASIENTOS_PREFE_SECCION', N'P' ) IS NOT NULL
DROP PROCEDURE BT_SP_ASIENTOS_PREFE_SECCION;
GO
/*
5) Idem 4) pero referido a secciones del teatro.
*/
CREATE PROCEDURE BT_SP_ASIENTOS_PREFE_SECCION
@FechaIni datetime,
@FechaFin datetime
AS
BEGIN
BEGIN TRY
DECLARE @TableA TABLE(
Id_Tiquete int,
FK_Asiento int,
FK_Tanda int,
FK_Localidad int,
NumeroAsiento int,
NombreLocalidad varchar(50),
FechaHora datetime,
NombreEvento varchar(150),
NombreTipoEvento varchar(150)
);
DECLARE @TablaAux TABLE(
NumeroCompras int,
NumeroAsiento int,
NombreLocalidad varchar(50)
);
BEGIN TRANSACTION
INSERT @TableA
(Id_Tiquete,FK_Asiento,FK_Tanda,FK_Localidad,NumeroAsiento,NombreLocalidad,FechaHora,NombreEvento,NombreTipoEvento)
SELECT X.ID,AT.FK_Asiento,AT.FK_Tanda,A.FK_Localidad,A.Numero,L.Nombre,T.FechaHora,E.Nombre,TE.Nombre
FROM BoleteriaTeatroDB.dbo.BT_Tiquete X
INNER JOIN BoleteriaTeatroDB.dbo.BT_AsientoXTanda AT ON AT.Id = X.FK_AsientoXTanda
INNER JOIN BoleteriaTeatroDB.dbo.BT_Tanda T ON T.Id = AT.FK_Tanda
INNER JOIN BoleteriaTeatroDB.dbo.BT_Evento E ON E.Id = T.FK_Evento
INNER JOIN BoleteriaTeatroDB.dbo.BT_TipoEvento TE ON TE.Id = E.FK_TipoEvento
INNER JOIN BoleteriaTeatroDB.dbo.BT_Asiento A ON A.Id = AT.FK_Asiento
INNER JOIN BoleteriaTeatroDB.dbo.BT_Localidad L ON L.Id = A.FK_Localidad
WHERE /*TE.Nombre = 'Opera' AND*/ (T.FechaHora BETWEEN @FechaIni AND @FechaFin)
INSERT @TablaAux
(NumeroCompras,NumeroAsiento,NombreLocalidad)
SELECT COUNT(NumeroAsiento) AS NumeroCompras,NumeroAsiento,NombreLocalidad
FROM @TableA GROUP BY NumeroAsiento,NombreLocalidad
SELECT NumeroCompras,NumeroAsiento,NombreLocalidad FROM @TablaAux ORDER BY NumeroCompras DESC
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
RETURN 1;
END TRY
BEGIN CATCH
EXEC BT_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
RETURN @@ERROR*-1;
END CATCH
END
GO
--EXEC BT_SP_ASIENTOS_PREFE_SECCION '2014-11-21 00:00:00.000', '2015-11-20 00:00:00.000'
----------------------------------------------------------------------------------------------------------------------
-- Verifica si el store procedure existe, para eliminarlo
IF OBJECT_ID ( N'BT_SP_ASIENTOS_MENOS_PREFE', N'P' ) IS NOT NULL
DROP PROCEDURE BT_SP_ASIENTOS_MENOS_PREFE;
GO
/*
6) Por tipo de evento, de manera historica, los 10 asientos menos preferidos.
Entrada: Ninguna
Salidas: Para cada tipo de evento, se listan los 10 asientos que nunca fueron reservados, o que tienen la menor cantidad de compras.
*/
CREATE PROCEDURE BT_SP_ASIENTOS_MENOS_PREFE
AS
BEGIN
BEGIN TRY
DECLARE @TableA TABLE(
Id_Tiquete int,
FK_Asiento int,
FK_Tanda int,
NumeroAsiento int,
FechaHora datetime,
NombreEvento varchar(150),
NombreTipoEvento varchar(150)
);
DECLARE @TableAux TABLE(
TotalComprado int,
NumeroAsiento int,
NombreTipoEvento varchar(150)
);
BEGIN TRANSACTION
INSERT @TableA
(Id_Tiquete,FK_Asiento,FK_Tanda,NumeroAsiento,FechaHora,NombreEvento,NombreTipoEvento)
SELECT X.ID,AT.FK_Asiento,AT.FK_Tanda,A.Numero,T.FechaHora,E.Nombre,TE.Nombre
FROM BoleteriaTeatroDB.dbo.BT_Tiquete X
INNER JOIN BoleteriaTeatroDB.dbo.BT_AsientoXTanda AT ON AT.Id = X.FK_AsientoXTanda
INNER JOIN BoleteriaTeatroDB.dbo.BT_Tanda T ON T.Id = AT.FK_Tanda
INNER JOIN BoleteriaTeatroDB.dbo.BT_Evento E ON E.Id = T.FK_Evento
INNER JOIN BoleteriaTeatroDB.dbo.BT_TipoEvento TE ON TE.Id = E.FK_TipoEvento
INNER JOIN BoleteriaTeatroDB.dbo.BT_Asiento A ON A.Id = AT.FK_Asiento
INSERT @TableAux
(TotalComprado,NumeroAsiento,NombreTipoEvento)
SELECT COUNT(NumeroAsiento) AS TotalComprado,NumeroAsiento,NombreTipoEvento FROM @TableA
GROUP BY NumeroAsiento,NombreTipoEvento
SELECT * FROM @TableAux ta
/*SELECT TOP 10 TotalComprado,NumeroAsiento,NombreTipoEvento
FROM @TableAux
GROUP BY NombreTipoEvento*/
--ORDER BY TotalComprado,NombreTipoEvento DESC
/*
SELECT TOP 10 TotalComprado,NumeroAsiento FROM @TableAux ORDER BY TotalComprado DESC*/
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
RETURN 1;
END TRY
BEGIN CATCH
EXEC BT_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
RETURN @@ERROR*-1;
END CATCH
END
GO
EXEC BT_SP_ASIENTOS_MENOS_PREFE
Horas Trabajadas: 2.5 hora
Autor: Edward Ovares Villegas