Buenas, les dejo el 1er parcial práctico de gestión de datos de la cursada de Lacquaniti-Moscuzza 1c 2018
Creo que se tomó el 27/6.
Enunciado:
Cita:1. Se pide realizar una consulta sql que retorne por cada año, el cliente que mas compro (fact_total), la canitdad de articulos distintos comprados, la cantidad de rubros distintos comprados.
Solamente se deberan mostras aquellos clientes que posean al menos 10 facturas o mas por año.
El resultado debe ser ordenado por año.
Nota: no se permite el uso de sub-selects en el FROM ni funciones definidas por el usuario para este punto.
2. Implementar el/los objetos necesarios para la siguiente restriccion:
"Toda composicion (ej. COMBO 1) debe estar compuesta solamente por productos simples (EJ: COMBO4 compuesto por: 4 Hamburguesas, 2 gaseosas y 2 papas). No se permitirá que un combo este compuesto por nigun otro combo."
Se sabe que en la actualidad dicha regla se cumple y que la base de datos es accedido por n aplicaciones de diferentes tipos y tecnologías.
Resolución:
1. (Nota 8)
USE [GD2015C1]
GO
SELECT f.fact_cliente, YEAR(f.fact_fecha) as anio, COUNT(DISTINCT i.item_producto) as 'Cant Prod Distintos', COUNT(DISTINCT p.prod_rubro) as 'Rubros Distintos'
FROM
Factura f
JOIN Item_Factura i
ON f.fact_tipo = i.item_tipo and f.fact_sucursal = i.item_sucursal and f.fact_numero = i.item_numero
JOIN Producto p
ON i.item_producto = p.prod_codigo
WHERE f.fact_cliente = (
SELECT TOP 1 f2.fact_cliente
FROM Factura f2
WHERE YEAR(f2.fact_fecha) = YEAR(f.fact_fecha)
GROUP BY f2.fact_cliente
ORDER BY SUM(isnull(f2.fact_total,0)) desc
)
GROUP BY f.fact_cliente, YEAR(f.fact_fecha)
HAVING COUNT(fact_cliente) >= 10
ORDER BY YEAR(f.fact_fecha)
2. (nota 9, faltó chequear la composiciones tipo Combo1,Combo1)
USE [GD2015C1]
GO
CREATE TRIGGER TR_COMPOSICION ON Composicion
AFTER INSERT, UPDATE
AS
BEGIN TRANSACTION
IF(EXISTS(SELECT 1 FROM inserted i WHERE EXISTS(SELECT 1 FROM Composicion c WHERE c.comp_producto = i.comp_componente)))
BEGIN
RAISERROR('Las composiciones deben estar compuestas por productos simples', 1, 1)
ROLLBACK
RETURN
END
COMMIT TRANSACTION
GO
Saludoss.