martes, 25 de noviembre de 2014

Procedure: Problema 5 y Problema 6 Edward



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

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio