Advertisement
savemenico

Untitled

Jun 28th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.59 KB | None | 0 0
  1. --EJERCICIO 1
  2. Un caso no adecuado serian situaciones en las que constantemente tengo que ingresar por cualquier otro dato
  3. de la tabla o casos particulares (como el del ejercicio 2) donde tengo que barrer constantemente toda la tabla
  4. y no ingresar por un indice en particular o un rango de indices.
  5.  
  6. --EJERCICIO 2
  7.  
  8. No lo utiliza, debido a que ya de por si al ser el minimo = 1 debera recorrer toda la tabla de todas maneras.
  9. En este caso el indice es mas costoso porque acceder al arbol tiene un costo adicional, mientras que barrer
  10. la tabla es lineal. El costo de acceder a la tabla es n (la cantidad de registros) y el del arbol es mucho mayor.
  11. Esto obviamente no es lo mismo si le pidieramos un registro en especifico o una menor cantidad de registros
  12. ya que necesitaria una cantidad limitada de accesos (4 o 5 como ejemplo) contra muchos mas si tiene que barrer
  13. la tabla (400 500)
  14.  
  15. --EJERCICIO 3
  16.  
  17. SELECT YEAR(fact_fecha) ANIO,
  18. (
  19.  SELECT SUM(ITEM_CANTIDAD) FROM ITEM_FACTURA
  20.  JOIN FACTURA ON item_sucursal = fact_sucursal AND
  21. item_tipo = fact_tipo AND
  22. item_numero = fact_numero
  23.  WHERE ITEM_PRODUCTO IN (SELECT comp_producto FROM Composicion)
  24.  AND YEAR(fact_fecha) = YEAR(f.fact_fecha)
  25. ) CANT_PROD_COMP_VEND,
  26. (SELECT COUNT(*)
  27. FROM Factura
  28. WHERE YEAR(fact_fecha) = YEAR(f.fact_fecha)) CANT_FACT_ANIO, SUM(ITEM_CANTIDAD * ITEM_PRECIO) MONTO_TOTAL_ANIO,
  29. (
  30. SELECT SUM(ITEM_CANTIDAD * ITEM_PRECIO)
  31.  
  32.  FROM ITEM_FACTURA i
  33. JOIN FACTURA
  34. ON item_sucursal = fact_sucursal AND
  35. item_tipo = fact_tipo AND
  36. item_numero = fact_numero
  37. WHERE  YEAR(f.FACT_FECHA) - 1 = YEAR(fact_fecha)
  38. ) MONTO_TOTAL_ANIO_ANT
  39. FROM ITEM_FACTURA JOIN Factura f
  40. ON item_sucursal = fact_sucursal AND
  41. item_tipo = fact_tipo AND
  42. item_numero = fact_numero WHERE 10 < (
  43. SELECT top 1 ISNULL(SUM(ITEM_CANTIDAD),0) FROM
  44. 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)
  45. LEFT JOIN Factura f
  46. ON item_sucursal = fact_sucursal AND
  47. item_tipo = fact_tipo AND
  48. item_numero = fact_numero AND YEAR(f.fact_fecha) = YEAR(fact_fecha)
  49.   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
  50.  ORDER BY 1 ASC
  51.  )
  52. GROUP BY YEAR(fact_fecha)
  53. ORDER BY
  54. (SELECT top 1 CASE WHEN ISNULL(SUM(ITEM_CANTIDAD),0) BETWEEN 50 AND 100 THEN 1 ELSE 0 END FROM
  55. 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)
  56. LEFT JOIN Factura f
  57. ON item_sucursal = fact_sucursal AND
  58. item_tipo = fact_tipo AND
  59. item_numero = fact_numero AND YEAR(f.fact_fecha) = YEAR(fact_fecha)
  60.  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
  61.  HAVING ISNULL(SUM(ITEM_CANTIDAD),0) BETWEEN 50 AND 100
  62.  ) DESC
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  --EJERCICIO 4
  69.  
  70.  
  71. CREATE TRIGGER fact_prod_00 ON ITEM_FACTURA AFTER INSERT, UPDATE
  72. AS
  73. BEGIN
  74.  
  75.     DECLARE @i_producto CHAR(8)
  76.     DECLARE @diferencia DECIMAL(12,2)
  77.     DECLARE @diferencia_comp DECIMAL(12,2)
  78.     DECLARE @stock_disponible DECIMAL(12,2)
  79.     DECLARE @comp_prod CHAR(8)
  80.     DECLARE @stock_comp DECIMAL(12,2)
  81.  
  82.  
  83.     DECLARE FACTURACION CURSOR FOR
  84.     SELECT i.item_cantidad - isnull(d.item_cantidad,0), i.item_producto,
  85.     comp_componente, ISNULL(comp_cantidad,0) * (i.item_cantidad - isnull(d.item_cantidad,0))
  86.     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
  87.     LEFT JOIN Composicion ON comp_producto = i.item_producto
  88.     AND i.item_producto = d.item_producto
  89.  
  90.     OPEN FACTURACION
  91.    
  92.     FETCH NEXT FROM FACTURACION INTO @diferencia,@i_producto,@comp_prod,@diferencia_comp
  93.    
  94.     WHILE @@FETCH_STATUS = 0  
  95.     BEGIN
  96.         SELECT @stock_disponible = stoc_cantidad FROM STOCK
  97.         WHERE stoc_deposito = '00' AND stoc_producto = @i_producto
  98.  
  99.         SELECT @stock_comp = stoc_cantidad FROM STOCK
  100.         WHERE stoc_deposito = '00' AND stoc_producto = @comp_prod
  101.        
  102.  
  103.  
  104.         IF (@stock_disponible < @diferencia OR @stock_comp < @diferencia_comp)
  105.         BEGIN
  106.             ROLLBACK TRANSACTION
  107.             RAISERROR('No hay suficiente stock en el deposito "00" para agregar ese articulo',16,1)
  108.         END
  109.         ELSE
  110.         commit
  111.        
  112.         FETCH NEXT FROM FACTURACION INTO @diferencia,@i_producto,@comp_prod,@diferencia_comp
  113.     END
  114.    
  115.     CLOSE FACTURACION
  116.  
  117. END
  118.  
  119. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement