-- Creación de la base de datos
CREATE DATABASE VENTAS_1;
USE VENTAS_1;
-- Creación de tablas
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY IDENTITY(1, 1),
Nombre VARCHAR(100) NOT NULL,
Direccion VARCHAR(200),
Telefono VARCHAR(15),
Email VARCHAR(100)
);
CREATE TABLE Productos (
ProductoID INT PRIMARY KEY IDENTITY(1, 1),
Nombre VARCHAR(100) NOT NULL,
Descripcion TEXT,
Precio DECIMAL(10, 2) NOT NULL,
Stock INT NOT NULL
);
CREATE TABLE Ventas (
VentaID INT PRIMARY KEY IDENTITY(1, 1),
ClienteID INT,
FechaVenta DATETIME NOT NULL DEFAULT GETDATE(),
Total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) ON DELETE CASCADE
);
CREATE TABLE DetallesVenta (
DetalleID INT PRIMARY KEY IDENTITY(1, 1),
VentaID INT,
ProductoID INT,
Cantidad INT NOT NULL,
PrecioUnitario DECIMAL(10, 2) NOT NULL,
Subtotal AS (Cantidad * PrecioUnitario) PERSISTED,
FOREIGN KEY (VentaID) REFERENCES Ventas(VentaID) ON DELETE CASCADE,
FOREIGN KEY (ProductoID) REFERENCES Productos(ProductoID) ON DELETE CASCADE
);
-- Insertar datos en Clientes
INSERT INTO Clientes (Nombre, Direccion, Telefono, Email) VALUES
('Alex Martinez', 'Calle S44-D', '45-545', 'alex.martinez@gmail.com'),
('Carla Romano', 'Pasaje B54-32', '11-S2', 'carla.romano@gmail.com'),
('Priscila Jativa', 'Felix león de Tijuana', '233-222', 'priscila.jativa@hotmail.com');
-- Insertar datos en Productos
INSERT INTO Productos (Nombre, Descripcion, Precio, Stock) VALUES
('Teléfono REDMI', 'Pantalla 1980 x 720 píxeles, color negro', 1400.00, 10),
('CPU Gamer INTEL', 'Procesador Core i8, 1 TB de almacenamiento, color rojo', 1250.00, 10),
('Computadora de escritorio', 'Procesador Core i8, 1 TB de almacenamiento', 500.00, 20);
-- Insertar datos en Ventas
INSERT INTO Ventas (ClienteID, Total) VALUES
(1, 1900.00),
(2, 1250.00),
(3, 500.00);
-- Insertar datos en DetallesVenta
INSERT INTO DetallesVenta (VentaID, ProductoID, Cantidad, PrecioUnitario) VALUES
(1, 1, 1, 1400.00),
(1, 2, 1, 500.00),
(2, 2, 1, 1250.00),
(3, 3, 1, 500.00);
--Queremos saber acerca de producto
--Nivel 1 ,venta por mes y producto
SELECT
FORMAT(V.FechaVenta, 'yyyy-MM') AS Mes,
P.Nombre AS Producto,
SUM(DV.Cantidad) AS CantidadVendida,
SUM(DV.Subtotal) AS TotalGenerado
FROM DetallesVenta DV
JOIN Ventas V ON DV.VentaID = V.VentaID
JOIN Productos P ON DV.ProductoID = P.ProductoID
GROUP BY FORMAT(V.FechaVenta, 'yyyy-MM'), P.Nombre
ORDER BY Mes DESC, TotalGenerado DESC;
--Nivel 2 , cliente y producto vendido
SELECT
C.Nombre AS Cliente,
P.Nombre AS Producto,
SUM(DV.Cantidad) AS CantidadComprada,
SUM(DV.Subtotal) AS TotalGastado
FROM Ventas V
JOIN Clientes C ON V.ClienteID = C.ClienteID
JOIN DetallesVenta DV ON V.VentaID = DV.VentaID
JOIN Productos P ON DV.ProductoID = P.ProductoID
GROUP BY C.Nombre, P.Nombre
ORDER BY C.Nombre, TotalGastado DESC;