Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --EJERCICIO 1
- Un caso no adecuado serian situaciones en las que constantemente tengo que ingresar por cualquier otro dato
- de la tabla o casos particulares (como el del ejercicio 2) donde tengo que barrer constantemente toda la tabla
- y no ingresar por un indice en particular o un rango de indices.
- --EJERCICIO 2
- No lo utiliza, debido a que ya de por si al ser el minimo = 1 debera recorrer toda la tabla de todas maneras.
- En este caso el indice es mas costoso porque acceder al arbol tiene un costo adicional, mientras que barrer
- la tabla es lineal. El costo de acceder a la tabla es n (la cantidad de registros) y el del arbol es mucho mayor.
- Esto obviamente no es lo mismo si le pidieramos un registro en especifico o una menor cantidad de registros
- ya que necesitaria una cantidad limitada de accesos (4 o 5 como ejemplo) contra muchos mas si tiene que barrer
- la tabla (400 500)
- --EJERCICIO 3
- SELECT YEAR(fact_fecha) ANIO,
- (
- SELECT SUM(ITEM_CANTIDAD) FROM ITEM_FACTURA
- JOIN FACTURA ON item_sucursal = fact_sucursal AND
- item_tipo = fact_tipo AND
- item_numero = fact_numero
- WHERE ITEM_PRODUCTO IN (SELECT comp_producto FROM Composicion)
- AND YEAR(fact_fecha) = YEAR(f.fact_fecha)
- ) CANT_PROD_COMP_VEND,
- (SELECT COUNT(*)
- FROM Factura
- WHERE YEAR(fact_fecha) = YEAR(f.fact_fecha)) CANT_FACT_ANIO, SUM(ITEM_CANTIDAD * ITEM_PRECIO) MONTO_TOTAL_ANIO,
- (
- SELECT SUM(ITEM_CANTIDAD * ITEM_PRECIO)
- FROM ITEM_FACTURA i
- JOIN FACTURA
- ON item_sucursal = fact_sucursal AND
- item_tipo = fact_tipo AND
- item_numero = fact_numero
- WHERE YEAR(f.FACT_FECHA) - 1 = YEAR(fact_fecha)
- ) MONTO_TOTAL_ANIO_ANT
- FROM ITEM_FACTURA JOIN Factura f
- ON item_sucursal = fact_sucursal AND
- item_tipo = fact_tipo AND
- item_numero = fact_numero WHERE 10 < (
- SELECT top 1 ISNULL(SUM(ITEM_CANTIDAD),0) FROM
- PRODUCTO LEFT JOIN ITEM_FACTURA ON item_producto = prod_codigo --ESTOY PIDIENDO DE TODOS LOS ARTICULOS NO SOLO LOS QUE ESTAN EN FACTURA (HAY ALGUNOS EN CERO)
- LEFT JOIN Factura f
- ON item_sucursal = fact_sucursal AND
- item_tipo = fact_tipo AND
- item_numero = fact_numero AND YEAR(f.fact_fecha) = YEAR(fact_fecha)
- GROUP BY PROD_CODIGO --ASUMO QUE SI PIDE CANTIDAD VENDIDA De TODOS LOS ARTICULOS ES POR CADA ARTICULO SINO DIRIA LA CANTIDAD VENDIDA EN EL AムO POR ESO EL GROUP BY POR PROD CODIGO
- ORDER BY 1 ASC
- )
- GROUP BY YEAR(fact_fecha)
- ORDER BY
- (SELECT top 1 CASE WHEN ISNULL(SUM(ITEM_CANTIDAD),0) BETWEEN 50 AND 100 THEN 1 ELSE 0 END FROM
- PRODUCTO LEFT JOIN ITEM_FACTURA ON item_producto = prod_codigo --ESTOY PIDIENDO DE TODOS LOS ARTICULOS NO SOLO LOS QUE ESTAN EN FACTURA (HAY ALGUNOS EN CERO)
- LEFT JOIN Factura f
- ON item_sucursal = fact_sucursal AND
- item_tipo = fact_tipo AND
- item_numero = fact_numero AND YEAR(f.fact_fecha) = YEAR(fact_fecha)
- GROUP BY PROD_CODIGO --ASUMO QUE SI PIDE CANTIDAD VENDIDA De TODOS LOS ARTICULOS ES POR CADA ARTICULO SINO DIRIA LA CANTIDAD VENDIDA EN EL AムO POR ESO EL GROUP BY POR PROD CODIGO
- HAVING ISNULL(SUM(ITEM_CANTIDAD),0) BETWEEN 50 AND 100
- ) DESC
- --EJERCICIO 4
- CREATE TRIGGER fact_prod_00 ON ITEM_FACTURA AFTER INSERT, UPDATE
- AS
- BEGIN
- DECLARE @i_producto CHAR(8)
- DECLARE @diferencia DECIMAL(12,2)
- DECLARE @diferencia_comp DECIMAL(12,2)
- DECLARE @stock_disponible DECIMAL(12,2)
- DECLARE @comp_prod CHAR(8)
- DECLARE @stock_comp DECIMAL(12,2)
- DECLARE FACTURACION CURSOR FOR
- SELECT i.item_cantidad - isnull(d.item_cantidad,0), i.item_producto,
- comp_componente, ISNULL(comp_cantidad,0) * (i.item_cantidad - isnull(d.item_cantidad,0))
- FROM INSERTED i LEFT JOIN DELETED d ON i.item_tipo = d.item_tipo AND i.item_numero = d.item_numero AND i.item_sucursal = d.item_sucursal
- LEFT JOIN Composicion ON comp_producto = i.item_producto
- AND i.item_producto = d.item_producto
- OPEN FACTURACION
- FETCH NEXT FROM FACTURACION INTO @diferencia,@i_producto,@comp_prod,@diferencia_comp
- WHILE @@FETCH_STATUS = 0
- BEGIN
- SELECT @stock_disponible = stoc_cantidad FROM STOCK
- WHERE stoc_deposito = '00' AND stoc_producto = @i_producto
- SELECT @stock_comp = stoc_cantidad FROM STOCK
- WHERE stoc_deposito = '00' AND stoc_producto = @comp_prod
- IF (@stock_disponible < @diferencia OR @stock_comp < @diferencia_comp)
- BEGIN
- ROLLBACK TRANSACTION
- RAISERROR('No hay suficiente stock en el deposito "00" para agregar ese articulo',16,1)
- END
- ELSE
- commit
- FETCH NEXT FROM FACTURACION INTO @diferencia,@i_producto,@comp_prod,@diferencia_comp
- END
- CLOSE FACTURACION
- END
- GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement