Procedure: problema 1 y problema 2 Edward
DESCRIPCION:
1) Los 3 número de semana del año (un valor entre 1 y 52), que en promedio (considerando todos los años de historia) asisten mas personas al teatro nacional.
Entradas: Ninguna.
Salidas: Numero de semana, Cantidad de asistentes promedio. En orden descendente de la cantidad.
2) Idem 1), pero no referido a la cantidad de personas, sino al ingreso total de la taquilla.
PROBLEMAS:
En este metodo se encontraron muchos problemas, en general por errores al insertar asientoXtanda ya que los fk los teniamos intercambiados y lo cual generaba muchos errores.
Otro problema es que estaba insertando los usuarios repetidos en la base de datos.
Entre los errores estaban que se intentaba llamar un querry dentro de otro generando errores.
)_%2B-%2BMicros.png)
)_%2B-%2BMicrosoft.png)
)_%2B-%2BMicrosoft.png)
)_%2B-%2BMicrosoft.png)
El codigo de este procedimiento es el siguiente:
-- Verifica si el store procedure existe, para eliminarlo
IF OBJECT_ID ( N'BT_SP_ASISTENCIAS_SEMANAS_ANNO', N'P' ) IS NOT NULL
DROP PROCEDURE BT_SP_ASISTENCIAS_SEMANAS_ANNO;
GO
/* Los 3 número de semana del año (un valor entre 1 y 52), que en promedio
(considerando todos los años de historia) asisten mas personas al teatro nacional.
Entradas: Ninguna.
Salidas: Numero de semana, Cantidad de asistentes promedio. En orden descendente de la cantidad.
*/
CREATE PROCEDURE BT_SP_ASISTENCIAS_SEMANAS_ANNO
AS
BEGIN
BEGIN TRY
DECLARE @Tabla TABLE (
id int,
Fecha datetime,
NumSemana int
);
DECLARE @TablaSem TABLE(
TotalAsist int,
NumSemana int
);
DECLARE @TablaProm TABLE(
NumSemana int,
Promedio float
);
BEGIN TRANSACTION
INSERT @Tabla
(id,Fecha,NumSemana)
SELECT X.ID,T.FechaHora,DATEPART(week,T.FechaHora) AS Semana
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
ORDER BY T.FechaHora ASC
INSERT @TablaSem
(TotalAsist,NumSemana)
SELECT COUNT(NumSemana) AS TotalAsist,NumSemana FROM @Tabla GROUP BY NumSemana
INSERT @TablaProm
(NumSemana,Promedio)
SELECT NumSemana,AVG(TotalAsist) AS Promedio
FROM @TablaSem T GROUP BY TotalAsist,NumSemana
SELECT TOP 3 * FROM @TablaProm tp ORDER BY Promedio 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_ASISTENCIAS_SEMANAS_ANNO
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el store procedure existe, para eliminarlo
IF OBJECT_ID ( N'BT_SP_IGRESOS_SEMANAS_ANNO', N'P' ) IS NOT NULL
DROP PROCEDURE BT_SP_IGRESOS_SEMANAS_ANNO;
GO
/*
Idem 1), pero no referido a la cantidad de personas, sino al ingreso total de la taquilla.
*/
CREATE PROCEDURE BT_SP_IGRESOS_SEMANAS_ANNO
AS
BEGIN
BEGIN TRY
DECLARE @Tabla TABLE (
id int,
Fecha datetime,
NumSemana int,
Precio money
);
DECLARE @TablaSem TABLE(
TotalDinero money,
NumSemana int
);
DECLARE @TablaProm TABLE(
NumSemana int,
PromedioDinero money
);
BEGIN TRANSACTION
INSERT @Tabla
(id,Fecha,NumSemana,Precio)
SELECT X.ID,T.FechaHora,DATEPART(week,T.FechaHora) AS Semana,X.PrecioTotal
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
ORDER BY T.FechaHora ASC
INSERT @TablaSem
(TotalDinero,NumSemana)
SELECT SUM(Precio) AS TotalDinero,NumSemana FROM @Tabla GROUP BY NumSemana
INSERT @TablaProm
(NumSemana,PromedioDinero)
SELECT NumSemana,AVG(TotalDinero) AS Promedio
FROM @TablaSem T GROUP BY TotalDinero,NumSemana
SELECT TOP 3 * FROM @TablaProm tp ORDER BY PromedioDinero 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_IGRESOS_SEMANAS_ANNO
Horas Trabajadas: 3.5 hora
Autor: Edward Ovares Villegas

0 comentarios:
Publicar un comentario
Suscribirse a Enviar comentarios [Atom]
<< Inicio