UTNianos

Versión completa: [Aporte] Parcial práctico GDD Edgardo Lacquaniti 1c 2018
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.
URLs de referencia