Procedimientos del Parcial
Procedimientos del Parcial
Motores BD:
--SQL:
GO
--2.
CREATE PROCEDURE AgregarCliente
@Nombre nvarchar(50),
@Ciudad nvarchar(50)
AS
BEGIN
INSERT INTO Clientes (Nombre, Ciudad) VALUES (@Nombre, @Ciudad);
END;
GO
--3.
CREATE PROCEDURE ConsultarOrdenesPorCliente
@ClienteID int
AS
BEGIN
SELECT * FROM Ordenes WHERE ClienteID = @ClienteID;
END;
GO
--4.
CREATE PROCEDURE ObtenerDetallesDeOrden
@OrdenID int
AS
BEGIN
SELECT DO.DetalleID, P.Nombre AS NombreProducto, DO.Cantidad,
(DO.Cantidad * P.Precio) AS Total
FROM DetallesOrden DO
INNER JOIN Productos P ON DO.ProductoID = P.ProductoID
WHERE DO.OrdenID = @OrdenID;
END;
GO
--5.
CREATE PROCEDURE ActualizarMontoOrden
@OrdenID int,
@NuevoMonto decimal(10, 2)
AS
BEGIN
UPDATE Ordenes
SET Monto = @NuevoMonto
WHERE OrdenID = @OrdenID;
END;
GO
--6.
CREATE PROCEDURE ObtenerClientesYTotalOrdenes
AS
BEGIN
SELECT C.ClienteID, C.Nombre, COUNT(O.OrdenID) AS TotalOrdenes
FROM Clientes C
LEFT JOIN Ordenes O ON C.ClienteID = O.ClienteID
GROUP BY C.ClienteID, C.Nombre;
END;
GO
--7.
CREATE PROCEDURE ObtenerOrdenesYEstado
AS
BEGIN
SELECT O.OrdenID, O.FechaOrden, O.Monto,
CASE
WHEN O.Monto > 100 THEN 'Alto'
WHEN O.Monto BETWEEN 50 AND 100 THEN 'Medio'
ELSE 'Bajo'
END AS Estado
FROM Ordenes O;
END;
GO
--8.
CREATE PROCEDURE ConsultarProductosYCantidadVendida
AS
BEGIN
SELECT P.ProductoID, P.Nombre,
SUM(DO.Cantidad) AS CantidadVendida
FROM Productos P
LEFT JOIN DetallesOrden DO ON P.ProductoID = DO.ProductoID
GROUP BY P.ProductoID, P.Nombre;
END;
GO
--9.
CREATE PROCEDURE ObtenerClienteConMayorOrden
AS
BEGIN
SELECT C.ClienteID, C.Nombre, MAX(O.Monto) AS MayorMonto
FROM Clientes C
INNER JOIN Ordenes O ON C.ClienteID = O.ClienteID
GROUP BY C.ClienteID, C.Nombre;
END;
GO
--10.
CREATE PROCEDURE ConsultarOrdenesYClasificarPorFecha
AS
BEGIN
SELECT O.OrdenID, O.FechaOrden,
CASE
WHEN O.FechaOrden < DATEADD(MONTH, -1, GETDATE()) THEN 'Antigua'
ELSE 'Reciente'
END AS Clasificacion
FROM Ordenes O;
END;
GO
--11.
CREATE PROCEDURE ObtenerMontoTotalPorCliente
@ClienteID int
AS
BEGIN
SELECT SUM(O.Monto) AS MontoTotal
FROM Ordenes O
WHERE O.ClienteID = @ClienteID;
END;
GO
--12.
CREATE PROCEDURE ConsultarProductosYClasificacionPorPrecio
AS
BEGIN
SELECT P.ProductoID, P.Nombre, P.Precio,
CASE
WHEN P.Precio < 20 THEN 'Económico'
WHEN P.Precio BETWEEN 20 AND 50 THEN 'Razonable'
ELSE 'Costoso'
END AS Clasificacion
FROM Productos P;
END;
GO
--13.
CREATE PROCEDURE ObtenerClienteYProductoMasComprado
AS
BEGIN
SELECT C.ClienteID, C.Nombre, P.Nombre AS NombreProducto,
COUNT(DO.DetalleID) AS TotalCompras
FROM Clientes C
INNER JOIN Ordenes O ON C.ClienteID = O.ClienteID
INNER JOIN DetallesOrden DO ON O.OrdenID = DO.OrdenID
INNER JOIN Productos P ON DO.ProductoID = P.ProductoID
GROUP BY C.ClienteID, C.Nombre, P.Nombre
ORDER BY TotalCompras DESC;
END;
GO
--14.
CREATE PROCEDURE ConsultarOrdenesYEstadoPorMonto
AS
BEGIN
SELECT O.OrdenID, O.FechaOrden, O.Monto,
CASE
WHEN O.Monto < 50 THEN 'Pequeña'
WHEN O.Monto BETWEEN 50 AND 200 THEN 'Mediana'
ELSE 'Grande'
END AS Estado
FROM Ordenes O;
END;
GO
--15.
CREATE PROCEDURE ObtenerTotalProductosVendidosPorCliente
AS
BEGIN
SELECT C.ClienteID, C.Nombre,
SUM(DO.Cantidad) AS TotalProductosVendidos
FROM Clientes C
LEFT JOIN Ordenes O ON C.ClienteID = O.ClienteID
LEFT JOIN DetallesOrden DO ON O.OrdenID = DO.OrdenID
GROUP BY C.ClienteID, C.Nombre;
END;
GO
--16.
CREATE PROCEDURE ObtenerMontoTotalPorCiudad
@Ciudad nvarchar(50)
AS
BEGIN
SELECT SUM(O.Monto) AS MontoTotal
FROM Ordenes O
INNER JOIN Clientes C ON O.ClienteID = C.ClienteID
WHERE C.Ciudad = @Ciudad;
END;
GO
--17.
CREATE PROCEDURE ObtenerProductoMasVendidoPorFecha
@FechaInicio DATE,
@FechaFin DATE
AS
BEGIN
SELECT P.ProductoID, P.Nombre, SUM(DO.Cantidad) AS TotalVendidos
FROM Productos P
INNER JOIN DetallesOrden DO ON P.ProductoID = DO.ProductoID
INNER JOIN Ordenes O ON DO.OrdenID = O.OrdenID
WHERE O.FechaOrden BETWEEN @FechaInicio AND @FechaFin
GROUP BY P.ProductoID, P.Nombre
ORDER BY TotalVendidos DESC;
END;
GO
--18.
CREATE PROCEDURE ConsultarOrdenesYClasificarPorCantidad
AS
BEGIN
SELECT O.OrdenID, O.FechaOrden,
(SELECT COUNT(*) FROM DetallesOrden DO WHERE DO.OrdenID = O.OrdenID) AS TotalProductos,
CASE
WHEN (SELECT COUNT(*) FROM DetallesOrden DO WHERE DO.OrdenID = O.OrdenID) < 3 THEN 'Pocas'
ELSE 'Muchas'
END AS Clasificacion
FROM Ordenes O;
END;
GO
--19.
CREATE PROCEDURE ObtenerProductosYTotalVendido
AS
BEGIN
SELECT P.ProductoID, P.Nombre, P.Precio,
SUM(DO.Cantidad) AS TotalVendido
FROM Productos P
LEFT JOIN DetallesOrden DO ON P.ProductoID = DO.ProductoID
GROUP BY P.ProductoID, P.Nombre, P.Precio;
END;
GO
--20.
CREATE PROCEDURE ConsultarOrdenesYPromedioMonto
AS
BEGIN
SELECT O.OrdenID, O.FechaOrden, O.Monto,
(SELECT AVG(Monto) FROM Ordenes) AS PromedioMonto
FROM Ordenes O;
END;
GO