SERVICIO NACIONAL DE ADIESTRAMIENTO EN TRABAJO INDUSTRIAL
ZONAL LIMA – SURQUILLO
PROYECTO FINAL DEL
CURSO DATABASE DESIGN AND PROGRAMMING
WITH SQL (ORACLE)
NUESTRA BASE DE DATOS DEL INVENTARIO
INSTRUCTORA: GIANNINA MILAGRITOS LUYO FAJARDO
Curso: DATABASE DESIGN AND PROGRAMMING WITH SQL (ORACLE)
Estudiantes:
Juan Capcha
Javier Tacilla
Carlos Cardenas
Diego Paucar
INTRODUCCION:
Nuestra Base de Datos de Inventario es la columna vertebral de la gestión de recursos
de nuestro proyecto. Proporciona una plataforma eficiente para el seguimiento y
control de productos en nuestros almacenes y puntos de distribución. Con una
interfaz intuitiva y funciones avanzadas, facilita el acceso rápido a la información
clave y mejora la toma de decisiones.
JUSTIFICACION:
La creación de una Base de Datos de Inventario para nuestro trabajo final se justifica
por varias razones clave:
Aplicación Práctica de Conceptos: Nos permite aplicar los conocimientos
teóricos en diseño de bases de datos en un proyecto práctico.
Desarrollo de Habilidades Técnicas: Nos brinda la oportunidad de
desarrollar habilidades técnicas relevantes para nuestra formación académica y
futura carrera profesional.
Análisis de Problemas y Soluciones: A través del diseño e implementación,
enfrentaremos desafíos comunes en la gestión de datos, lo que nos permitirá
profundizar nuestra comprensión de los principios subyacentes.
Presentación de Resultados: Al finalizar el proyecto, podremos comunicar
efectivamente nuestros hallazgos y resultados, demostrando nuestra capacidad
para trabajar con bases de datos.
En resumen, la creación de una Base de Datos de Inventario es una parte integral de
nuestro proceso de aprendizaje, preparándonos para futuros desafíos en el campo de
la gestión de datos.
OBJETIVOS:
Objetivos de la Base de Datos de Inventario:
Diseñar una Base de Datos Funcional: Crear una estructura de base de
datos que gestione eficientemente la información del inventario.
Implementar un Modelo Normalizado: Garantizar la coherencia y eficiencia
de los datos mediante un modelo relacional.
Desarrollar una Interfaz Intuitiva: Crear una interfaz de usuario fácil de usar
para acceder y manipular la información del inventario.
Demostrar Conocimientos Adquiridos: Presentar un proyecto final completo
y funcional que demuestre nuestro dominio en el diseño y gestión de bases de
datos.
DIAGRAMA DE GANTT:
MAYO
ETAPAS O FASES
Semanas
FASE 1: ESTRATEGIAS Y ANÁLISIS 1 2 3 4
Lista de requerimientos y/o necesidades
Reglas del negocio
FASE 2: DISEÑO 1 2 3 4
Creación del diagrama ER
Estructura de la BD
Ubicación (Centralizada o Distribuida)
FASE 3: CREACIÓN 1 2 3 4
Corrección del diagrama ER
Código BD (Tabla, Procedimientos,
Vistas, Tipos de datos, PK FK, etc.)
FASE 2:
CREACION DE DIAGRAMA ER
ESTRUCTURA DE LA BASE DE DATOS:
PRODUCTO de muchos a uno unido a CATEGORIA
CATEGORIA de muchos a uno con ALMACEN
PRODUCTO de uno a muchos con KARDEX
KARDEX de uno a muchos con MOVI E/S
MOVI E/S de muchos a uno con EMPLEADO
EMPLEADO de uno a muchos con DISTRIBUCION el cual va a estar de muchos a
uno con PROVEEDOR
EMPLEADO de uno a muchos con COMPRA el cual una va a estar de muchos a
uno con CLIENTE
FASE 3:
CORRECCIÓN DEL DIAGRAMA ER
CODIGO DE LLENADO DE LA BASE DE DATOS:
CREACION DE LAS TABLAS PARA SQL SERVER:
CREATE TABLE almacen (
idalmacen CHAR(6) NOT NULL,
nombrealmacen VARCHAR(35),
responsablealmacen VARCHAR(25)
);
ALTER TABLE almacen ADD CONSTRAINT almacen_pk PRIMARY KEY ( idalmacen );
CREATE TABLE año (
id_año CHAR(6) NOT NULL,
año INTEGER NOT NULL
);
ALTER TABLE año ADD CONSTRAINT año_pk PRIMARY KEY ( id_año );
CREATE TABLE categoria (
idcategoria CHAR(6) NOT NULL,
nombrecategoria VARCHAR(35),
almacen_idalmacen CHAR(6) NOT NULL
);
ALTER TABLE categoria ADD CONSTRAINT categoria_pk PRIMARY KEY ( idcategoria );
CREATE TABLE cliente (
id_persona CHAR(6) NOT NULL,
id_cliente CHAR(6) NOT NULL,
dni INTEGER NOT NULL
);
ALTER TABLE cliente ADD CONSTRAINT cliente_pk PRIMARY KEY ( id_persona );
ALTER TABLE cliente ADD CONSTRAINT cliente_pkv1 UNIQUE ( id_cliente );
CREATE TABLE empleado (
id_empleado CHAR(6 ) NOT NULL,
nombre_emp VARCHAR(35) NOT NULL,
apellido_emp VARCHAR(35) NOT NULL,
dni INTEGER NOT NULL
);
ALTER TABLE empleado ADD CONSTRAINT empleado_pk PRIMARY KEY ( id_empleado );
CREATE TABLE mes (
id_mes CHAR(6) NOT NULL,
mes VARCHAR(15) NOT NULL
);
ALTER TABLE mes ADD CONSTRAINT mes_pk PRIMARY KEY ( id_mes );
CREATE TABLE movimiento (
persona_id_persona CHAR(6) NOT NULL,
id_tarjeta CHAR(6) NOT NULL,
id_detalle CHAR(6) NOT NULL,
tipo VARCHAR(1) NOT NULL,
cantidad INTEGER NOT NULL,
fecha DATE NOT NULL,
factura VARCHAR(10) NOT NULL,
tarjeta_id_tarjeta CHAR(6) NOT NULL
);
ALTER TABLE movimiento ADD CONSTRAINT detalle_de_movimeinto_pk PRIMARY KEY (
id_detalle );
CREATE TABLE periodo (
id_periodo CHAR(6) NOT NULL,
mes_id_mes CHAR(6) NOT NULL,
año_id_año CHAR(6) NOT NULL
);
ALTER TABLE periodo ADD CONSTRAINT periodo_pk PRIMARY KEY ( id_periodo );
CREATE TABLE persona (
id_persona CHAR(6) NOT NULL,
nombre VARCHAR(35) NOT NULL,
apellido VARCHAR(35) NOT NULL,
sexo VARCHAR(1) NOT NULL
);
ALTER TABLE persona ADD CONSTRAINT persona_pk PRIMARY KEY ( id_persona );
CREATE TABLE producto (
idproducto CHAR(6) NOT NULL,
nombreproducto VARCHAR(35),
stockinicial INTEGER,
descripcion VARCHAR(45),
marca VARCHAR(35),
categoria_idcategoria CHAR(6)
);
ALTER TABLE producto ADD CONSTRAINT producto_pk PRIMARY KEY ( idproducto );
CREATE TABLE tarjeta (
id_tarjeta CHAR(6) NOT NULL,
empleado_id_empleado CHAR(6) NOT NULL,
num_tarjeta CHAR(8) NOT NULL,
producto_idproducto CHAR(6) NOT NULL,
periodo_id_periodo CHAR(6)
);
ALTER TABLE tarjeta ADD CONSTRAINT entrada_pk PRIMARY KEY ( id_tarjeta );
CREATE TABLE proveedor (
id_persona CHAR(6) NOT NULL,
idproveedor CHAR(6) NOT NULL,
ruc INTEGER NOT NULL
);
ALTER TABLE proveedor ADD CONSTRAINT proveedor_pk PRIMARY KEY ( id_persona );
ALTER TABLE proveedor ADD CONSTRAINT proveedor_pkv1 UNIQUE ( idproveedor );
ALTER TABLE categoria
ADD CONSTRAINT categoria_almacen_fk FOREIGN KEY ( almacen_idalmacen )
REFERENCES almacen ( idalmacen );
ALTER TABLE cliente
ADD CONSTRAINT cliente_persona_fk FOREIGN KEY ( id_persona )
REFERENCES persona ( id_persona );
ALTER TABLE movimiento
ADD CONSTRAINT movimiento_persona_fk FOREIGN KEY ( persona_id_persona )
REFERENCES persona ( id_persona );
ALTER TABLE movimiento
ADD CONSTRAINT movimiento_tarjeta_fk FOREIGN KEY ( tarjeta_id_tarjeta )
REFERENCES tarjeta ( id_tarjeta );
ALTER TABLE periodo
ADD CONSTRAINT periodo_año_fk FOREIGN KEY ( año_id_año )
REFERENCES año ( id_año );
ALTER TABLE periodo
ADD CONSTRAINT periodo_mes_fk FOREIGN KEY ( mes_id_mes )
REFERENCES mes ( id_mes );
ALTER TABLE producto
ADD CONSTRAINT producto_categoria_fk FOREIGN KEY ( categoria_idcategoria )
REFERENCES categoria ( idcategoria );
ALTER TABLE proveedor
ADD CONSTRAINT proveedor_persona_fk FOREIGN KEY ( id_persona )
REFERENCES persona ( id_persona );
ALTER TABLE tarjeta
ADD CONSTRAINT tarjeta_empleado_fk FOREIGN KEY ( empleado_id_empleado )
REFERENCES empleado ( id_empleado );
ALTER TABLE tarjeta
ADD CONSTRAINT tarjeta_periodo_fk FOREIGN KEY ( periodo_id_periodo )
REFERENCES periodo ( id_periodo );
ALTER TABLE tarjeta
ADD CONSTRAINT tarjeta_producto_fk FOREIGN KEY ( producto_idproducto )
REFERENCES producto ( idproducto );
INSERTANDO DATOS A NUESTRAS TABLAS:
SELECT * FROM PERSONA;
INSERT INTO PERSONA VALUES('P001','Yamil','Freunt','F');
INSERT INTO PERSONA VALUES('P002','Carlos','Bustamante','M');
INSERT INTO PERSONA VALUES('P003','Jack','Ross','M');
INSERT INTO PERSONA VALUES('P004','Jenna','Brown','F');
INSERT INTO PERSONA VALUES('P005','Mica','Valdez','F');
INSERT INTO PERSONA VALUES('P006','Leyla','Llacctarimay','F');
INSERT INTO PERSONA VALUES('P007','Victor','Juarez','M');
INSERT INTO PERSONA VALUES('P008','Anjely','Quispe','F');
INSERT INTO PERSONA VALUES('P009','Jaeli','Roque','F');
INSERT INTO PERSONA VALUES('P010','Carla','Paucar','F');
INSERT INTO PERSONA VALUES('P011','INTERBANK','','');
INSERT INTO PERSONA VALUES('P012','ALICORP','','');
INSERT INTO PERSONA VALUES('P013','BBVA PERU','','');
INSERT INTO PERSONA VALUES('P014','NESTLE PERU','','');
INSERT INTO PERSONA VALUES('P015','MINERA ANTAMINA','','');
SELECT * FROM EMPLEADO;
INSERT INTO EMPLEADO VALUES('E001','Andrea','Agurto','73932658');
INSERT INTO EMPLEADO VALUES('E002','Maximo','Reyes','72464512');
INSERT INTO EMPLEADO VALUES('E003','Fabian','Vásquez','71245859');
INSERT INTO EMPLEADO VALUES('E004','Edwarcito','Cárdenas','41178584');
INSERT INTO EMPLEADO VALUES('E005','Karolina','Ysminio','41315684');
INSERT INTO EMPLEADO VALUES('E006','Bercy','Armas','41475264');
INSERT INTO EMPLEADO VALUES('E007','Guido','Vinces','49393217');
INSERT INTO EMPLEADO VALUES('E008','Daniel','Torres','82446932');
INSERT INTO EMPLEADO VALUES('E009','Lynda','Flores','23024561');
INSERT INTO EMPLEADO VALUES('E010','Noelia','Linares','32641521');
SELECT * FROM CLIENTE;
INSERT INTO CLIENTE VALUES('P001','C001','78459632');
INSERT INTO CLIENTE VALUES('P002','C002','20547896');
INSERT INTO CLIENTE VALUES('P003','C003','63124587');
INSERT INTO CLIENTE VALUES('P004','C004','39856214');
INSERT INTO CLIENTE VALUES('P005','C005','74019635');
INSERT INTO CLIENTE VALUES('P006','C006','51248796');
INSERT INTO CLIENTE VALUES('P007','C007','89632145');
INSERT INTO CLIENTE VALUES('P008','C008','45789632');
INSERT INTO CLIENTE VALUES('P009','C009','32015974');
INSERT INTO CLIENTE VALUES('P010','C010','67481235');
SELECT * FROM PROVEEDOR;
INSERT INTO PROVEEDOR VALUES('P011','SU001','206598741');
INSERT INTO PROVEEDOR VALUES('P012','SU002','201365874');
INSERT INTO PROVEEDOR VALUES('P013','SU003','209874563');
INSERT INTO PROVEEDOR VALUES('P014','SU004','208745123');
INSERT INTO PROVEEDOR VALUES('P015','SU005','202198745');
SELECT * FROM AÑO;
INSERT INTO AÑO values('AÑO001',2010);
INSERT INTO AÑO values('AÑO002',2011);
INSERT INTO AÑO values('AÑO003',2012);
INSERT INTO AÑO values('AÑO004',2013);
INSERT INTO AÑO values('AÑO005',2014);
INSERT INTO AÑO values('AÑO006',2015);
INSERT INTO AÑO values('AÑO007',2016);
INSERT INTO AÑO values('AÑO008',2017);
INSERT INTO AÑO values('AÑO009',2018);
INSERT INTO AÑO values('AÑO010',2019);
INSERT INTO AÑO values('AÑO011',2020);
SELECT * FROM MES;
INSERT INTO MES VALUES ('MES001',01);
INSERT INTO MES VALUES ('MES002',02);
INSERT INTO MES VALUES ('MES003',03);
INSERT INTO MES VALUES ('MES004',04);
INSERT INTO MES VALUES ('MES005',06);
INSERT INTO MES VALUES ('MES007',07);
INSERT INTO MES VALUES ('MES008',08);
INSERT INTO MES VALUES ('MES009',09);
INSERT INTO MES VALUES ('MES010',10);
INSERT INTO MES VALUES ('MES011',11);
INSERT INTO MES VALUES ('MES012',12);
SELECT * FROM PERIODO
INSERT INTO PERIODO VALUES ('PER001','MES001','AÑO001');
INSERT INTO PERIODO VALUES ('PER002','MES012','AÑO001');
INSERT INTO PERIODO VALUES ('PER003','MES004','AÑO002');
INSERT INTO PERIODO VALUES ('PER004','MES011','AÑO002');
INSERT INTO PERIODO VALUES ('PER005','MES005','AÑO003');
INSERT INTO PERIODO VALUES ('PER006','MES010','AÑO003');
INSERT INTO PERIODO VALUES ('PER007','MES011','AÑO004');
INSERT INTO PERIODO VALUES ('PER008','MES005','AÑO004');
INSERT INTO PERIODO VALUES ('PER009','MES007','AÑO005');
INSERT INTO PERIODO VALUES ('PER010','MES010','AÑO005');
INSERT INTO PERIODO VALUES ('PER011','MES012','AÑO006');
INSERT INTO PERIODO VALUES ('PER012','MES010','AÑO006');
INSERT INTO PERIODO VALUES ('PER013','MES011','AÑO007');
INSERT INTO PERIODO VALUES ('PER014','MES009','AÑO007');
INSERT INTO PERIODO VALUES ('PER015','MES010','AÑO008');
INSERT INTO PERIODO VALUES ('PER016','MES002','AÑO008');
INSERT INTO PERIODO VALUES ('PER017','MES005','AÑO009');
INSERT INTO PERIODO VALUES ('PER018','MES003','AÑO009');
INSERT INTO PERIODO VALUES ('PER019','MES007','AÑO010');
INSERT INTO PERIODO VALUES ('PER020','MES001','AÑO010');
INSERT INTO PERIODO VALUES ('PER021','MES008','AÑO011');
INSERT INTO PERIODO VALUES ('PER022','MES012','AÑO011');
SELECT * FROM ALMACEN;
INSERT INTO ALMACEN VALUES ('AL001', 'AlmacenA01','PAUCAR FLORES DIEGO');
INSERT INTO ALMACEN VALUES ('AL002', 'AlmacenA02','CARDENAS RICAPA CARLOS');
INSERT INTO ALMACEN VALUES ('AL003', 'AlmacenA03','CAPCHA PUZA JUAN
ALFREDO');
SELECT * FROM CATEGORIA;
INSERT INTO CATEGORIA VALUES ('CAT001','Tecnologia','AL001');
INSERT INTO CATEGORIA VALUES ('CAT002','Alimentos','AL003');
INSERT INTO CATEGORIA VALUES ('CAT003','Limpieza','AL002');
INSERT INTO CATEGORIA VALUES ('CAT004','Herramientas','AL001');
INSERT INTO CATEGORIA VALUES ('CAT005','Ropa','AL003');
SELECT * FROM PRODUCTO;
INSERT INTO PRODUCTO VALUES('PRO001','Tablet','250','7
pulgadas','Samsung','CAT001');
INSERT INTO PRODUCTO VALUES('PRO002','Lejia','500','500 ml','Clorox','CAT003');
INSERT INTO PRODUCTO VALUES('PRO003','Detergente','300','4 kg','Magia
Blanca','CAT003');
INSERT INTO PRODUCTO VALUES('PRO004','Chocolate','100','Barra de chocolate con
leche','Sublime','CAT002');
INSERT INTO PRODUCTO VALUES('PRO005','Galletas de soda','685','Saladas sabor
mantequilla','Club Social','CAT002');
INSERT INTO PRODUCTO VALUES('PRO006','Destornillador','15','Doble
uso','MAKRO','CAT004');
INSERT INTO PRODUCTO VALUES('PRO007','Pantalon','1024','Talla 18, color
beige','Jonhh','CAT005');
SELECT * FROM TARJETA;
INSERT INTO TARJETA VALUES('TAR001','E001','001','PRO002','PER001');
INSERT INTO TARJETA VALUES('TAR002','E001','002','PRO002','PER013');
INSERT INTO TARJETA VALUES('TAR003','E007','003','PRO001','PER005');
INSERT INTO TARJETA VALUES('TAR004','E002','004','PRO007','PER002');
INSERT INTO TARJETA VALUES('TAR005','E006','005','PRO005','PER010');
INSERT INTO TARJETA VALUES('TAR006','E001','006','PRO003','PER012');
INSERT INTO TARJETA VALUES('TAR007','E004','007','PRO006','PER003');
INSERT INTO TARJETA VALUES('TAR008','E005','008','PRO006','PER003');
INSERT INTO TARJETA VALUES('TAR009','E008','009','PRO001','PER005');
INSERT INTO TARJETA VALUES('TAR010','E005','010','PRO002','PER008');
INSERT INTO TARJETA VALUES('TAR011','E010','011','PRO003','PER008');
INSERT INTO TARJETA VALUES('TAR012','E010','012','PRO002','PER002');
INSERT INTO TARJETA VALUES('TAR013','E001','013','PRO004','PER001');
INSERT INTO TARJETA VALUES('TAR014','E009','014','PRO006','PER009');
SELECT * FROM MOVIMIENTO;
INSERT INTO MOVIMIENTO VALUES
('P001', 'TAR001', 'MOV001', 'E', 200, '2010-01-15', 'FAC001', 'TAR001'),
('P002', 'TAR002', 'MOV002', 'S', 150, '2010-12-10', 'FAC002', 'TAR002'),
('P003', 'TAR003', 'MOV003', 'E', 300, '2011-04-20', 'FAC003', 'TAR003'),
('P004', 'TAR004', 'MOV004', 'E', 100, '2011-11-25', 'FAC004', 'TAR004'),
('P005', 'TAR005', 'MOV005', 'S', 50, '2012-06-05', 'FAC005', 'TAR005'),
('P006', 'TAR006', 'MOV006', 'E', 80, '2012-10-15', 'FAC006', 'TAR006'),
('P007', 'TAR007', 'MOV007', 'S', 30, '2013-11-08', 'FAC007', 'TAR007'),
('P008', 'TAR008', 'MOV008', 'E', 500, '2013-05-17', 'FAC008', 'TAR008'),
('P009', 'TAR009', 'MOV009', 'E', 120, '2014-07-22', 'FAC009', 'TAR009'),
('P010', 'TAR010', 'MOV010', 'S', 200, '2014-10-12', 'FAC010', 'TAR010'),
('P011', 'TAR011', 'MOV011', 'E', 180, '2015-12-03', 'FAC011', 'TAR011'),
('P012', 'TAR012', 'MOV012', 'S', 70, '2015-10-21', 'FAC012', 'TAR012'),
('P013', 'TAR013', 'MOV013', 'E', 250, '2016-11-18', 'FAC013', 'TAR013'),
('P014', 'TAR014', 'MOV014', 'S', 90, '2016-09-30', 'FAC014', 'TAR014'),
('P001', 'TAR001', 'MOV015', 'E', 150, '2010-01-22', 'FAC015', 'TAR001'),
('P002', 'TAR002', 'MOV016', 'S', 30, '2010-12-17', 'FAC016', 'TAR002'),
('P003', 'TAR003', 'MOV017', 'E', 400, '2011-04-28', 'FAC017', 'TAR003'),
('P004', 'TAR004', 'MOV018', 'E', 80, '2011-11-30', 'FAC018', 'TAR004'),
('P005', 'TAR005', 'MOV019', 'S', 150, '2012-06-10', 'FAC019', 'TAR005'),
('P006', 'TAR006', 'MOV020', 'E', 90, '2012-10-28', 'FAC020', 'TAR006'),
('P007', 'TAR007', 'MOV021', 'S', 40, '2013-11-18', 'FAC021', 'TAR007'),
('P008', 'TAR008', 'MOV022', 'E', 300, '2013-05-25', 'FAC022', 'TAR008'),
('P009', 'TAR009', 'MOV023', 'E', 200, '2014-07-30', 'FAC023', 'TAR009'),
('P010', 'TAR010', 'MOV024', 'S', 180, '2014-10-25', 'FAC024', 'TAR010'),
('P011', 'TAR011', 'MOV025', 'E', 120, '2015-12-12', 'FAC025', 'TAR011'),
('P012', 'TAR012', 'MOV026', 'S', 50, '2015-10-29', 'FAC026', 'TAR012'),
('P013', 'TAR013', 'MOV027', 'E', 350, '2016-11-25', 'FAC027', 'TAR013'),
('P014', 'TAR014', 'MOV028', 'E', 150, '2016-09-07', 'FAC028', 'TAR014'),
('P001', 'TAR001', 'MOV029', 'S', 80, '2010-01-18', 'FAC029', 'TAR001'),
('P002', 'TAR002', 'MOV030', 'E', 200, '2010-12-23', 'FAC030', 'TAR002'),
('P003', 'TAR003', 'MOV031', 'S', 100, '2011-04-15', 'FAC031', 'TAR003'),
('P004', 'TAR004', 'MOV032', 'E', 450, '2011-11-20', 'FAC032', 'TAR004'),
('P005', 'TAR005', 'MOV033', 'E', 70, '2012-06-15', 'FAC033', 'TAR005'),
('P006', 'TAR006', 'MOV034', 'S', 250, '2012-10-31', 'FAC034', 'TAR006'),
('P007', 'TAR007', 'MOV035', 'E', 130, '2013-11-25', 'FAC035', 'TAR007'),
('P008', 'TAR008', 'MOV036', 'S', 60, '2013-05-28', 'FAC036', 'TAR008'),
('P009', 'TAR009', 'MOV037', 'E', 280, '2014-07-27', 'FAC037', 'TAR009'),
('P010', 'TAR010', 'MOV038', 'E', 180, '2014-10-20', 'FAC038', 'TAR010'),
('P011', 'TAR011', 'MOV039', 'S', 200, '2015-12-16', 'FAC039', 'TAR011'),
('P012', 'TAR012', 'MOV040', 'E', 100, '2015-10-11', 'FAC040', 'TAR012');
TABLAS CREADAS Y RELLENADAS:
CONSULTAS REALIZADAS:
1RA CONSULTA:
SELECT nombreproducto, SUM(cantidad) AS total_vendido
FROM movimiento
JOIN tarjeta ON movimiento.id_tarjeta = tarjeta.id_tarjeta
JOIN producto ON tarjeta.producto_idproducto = producto.idproducto
where tipo='S'
GROUP BY nombreproducto
ORDER BY total_vendido ASC ;
2DA CONSULTA
Procedimiento almacenado para ver stockactual por producto dentro de un
rango de fechas
CREATE PROCEDURE sp_stockXfechas
(
@ID_producto VARCHAR(10),
@fecha DATE,
@fechafin DATE
)
AS
BEGIN
SELECT NOMBREPRODUCTO, STOCKINICIAL, TIPO, CANTIDAD, FECHA,
STOCK_ACTUAL
FROM (
SELECT
PRO.NOMBREPRODUCTO,
PRO.STOCKINICIAL,
M.TIPO,
M.CANTIDAD,
M.FECHA,
PRO.STOCKINICIAL +
SUM(CASE
WHEN M.TIPO = 'E' THEN M.CANTIDAD
ELSE -M.CANTIDAD
END) OVER (PARTITION BY PRO.IDPRODUCTO ORDER BY M.FECHA ASC) AS
STOCK_ACTUAL,
ROW_NUMBER() OVER (PARTITION BY PRO.IDPRODUCTO ORDER BY M.FECHA
ASC) AS RowNumber
FROM
PRODUCTO PRO
INNER JOIN
TARJETA T ON T.producto_idproducto = PRO.idproducto
INNER JOIN
MOVIMIENTO M ON T.id_tarjeta = M.tarjeta_id_tarjeta
WHERE
PRO.IDPRODUCTO = @ID_producto
AND M.FECHA BETWEEN @fecha AND @fechafin
) AS Subquery
ORDER BY
FECHA ASC;
END;
GO
EXECUTE sp_stockXfechas 'PRO002', '2010-01-01', '2016-12-12'
3RA CONSULTA:
STOCK MINIMO PARA CADA PRODUCTO:
CREATE TABLE PRODUCTO
ADD stockminimo INTEGER,
stockmaximo INTEGER;
SELECT * FROM MOVIMIENTO;
SELECT * FROM PRODUCTO;
SELECT * FROM TARJETA;
UPDATE producto
SET stockminimo = CASE
WHEN idproducto = 'PRO001' THEN 50
WHEN idproducto = 'PRO002' THEN 100
WHEN idproducto = 'PRO003' THEN 80
WHEN idproducto = 'PRO004' THEN 20
WHEN idproducto = 'PRO005' THEN 150
WHEN idproducto = 'PRO006' THEN 10
WHEN idproducto = 'PRO007' THEN 200
END,
stockmaximo = CASE
WHEN idproducto = 'PRO001' THEN 400
WHEN idproducto = 'PRO002' THEN 900
WHEN idproducto = 'PRO003' THEN 600
WHEN idproducto = 'PRO004' THEN 300
WHEN idproducto = 'PRO005' THEN 1000
WHEN idproducto = 'PRO006' THEN 150
WHEN idproducto = 'PRO007' THEN 1500
END;
GO
SELECT idproducto, nombreproducto, stockminimo
FROM producto;
4TA CONSULTA
-- TOP 5 PRODUCTOS MÁS --
CREATE PROCEDURE obtenerTop5Productos
(
@tipo CHAR(1)
)
AS
IF EXISTS(SELECT * FROM MOVIMIENTO WHERE TIPO = @tipo)
BEGIN
SELECT TOP 5 P.NOMBREPRODUCTO NOMBRE, P.DESCRIPCION, P.MARCA,
SUM(CANTIDAD) VENTAS FROM MOVIMIENTO M
INNER JOIN TARJETA T ON M.ID_TARJETA = T.ID_TARJETA
INNER JOIN PRODUCTO P ON T.PRODUCTO_IDPRODUCTO = P.IDPRODUCTO
WHERE TIPO = @tipo
GROUP BY P.NOMBREPRODUCTO, P.DESCRIPCION ,P.MARCA
ORDER BY VENTAS DESC;
END
ELSE
BEGIN
PRINT 'El tipo de movimiento no existe.'
END
GO
EXEC obtenerTop5Productos 'S'
GO
5TA CONSULTA
-- CANTIDAD DE PRODUCTOS EN RANGO DE FECHAS --
CREATE PROCEDURE obtenerCantidadProductosxFecha
(
@tipo CHAR(1),
@fechaini DATE,
@fechafin DATE
)
AS
IF EXISTS(SELECT * FROM MOVIMIENTO WHERE TIPO = @tipo AND FECHA BETWEEN
@fechaini AND @fechafin)
BEGIN
SELECT P.NOMBREPRODUCTO NOMBRE, P.DESCRIPCION, P.MARCA, SUM(CANTIDAD)
VENTAS FROM MOVIMIENTO M
INNER JOIN TARJETA T ON M.ID_TARJETA = T.ID_TARJETA
INNER JOIN PRODUCTO P ON T.PRODUCTO_IDPRODUCTO = P.IDPRODUCTO
WHERE M.FECHA BETWEEN @fechaini AND @fechafin AND TIPO = @tipo
GROUP BY P.NOMBREPRODUCTO, P.DESCRIPCION, P.MARCA
END
ELSE
BEGIN
PRINT 'Movimiento no encontrado en rango de fechas.'
END
GO
EXEC obtenerCantidadProductosxFecha 'E','2010-01-01','2010-12-31'
GO
6TA CONSULTA
-- MOVIMIENTO DE UN PRODUCTO POR RANGO DE FECHA --
CREATE PROCEDURE verMovimientosProductoxFecha
(
@idproducto CHAR(8),
@fechaini DATE,
@fechafin DATE
)
AS
IF EXISTS(SELECT * FROM PRODUCTO WHERE IDPRODUCTO = @idproducto)
BEGIN
SELECT P.NOMBREPRODUCTO PRODUCTO, M.TIPO, M.FECHA FROM MOVIMIENTO M
INNER JOIN TARJETA T ON M.ID_TARJETA = T.ID_TARJETA
INNER JOIN PRODUCTO P ON T.PRODUCTO_IDPRODUCTO = P.IDPRODUCTO
WHERE P.IDPRODUCTO = @idproducto AND M.FECHA BETWEEN @fechaini AND
@fechafin
GROUP BY P.NOMBREPRODUCTO, M.TIPO, M.FECHA
END
ELSE
BEGIN
PRINT 'Producto no encontrado en rango de fechas.'
END
GO
EXEC verMovimientosProductoxFecha 'PRO007','2011-01-01','2011-12-31'
GO